在php中构建之前将运行什么代码?

时间:2018-08-17 15:17:24

标签: php extends grpc

我正在学习grpc,但是发现了一些奇怪的问题。

<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: order.proto

namespace Order;

use Google\Protobuf\Internal\GPBUtil;

class Test extends \Google\Protobuf\Internal\Message
{
    private $student_id = '';

    public function __construct($data = NULL)
    {
        echo 'test message';
        exit;
        \GPBMetadata\Order::initOnce();
        parent::__construct($data);
    }

    /**
     * Generated from protobuf field <code>string student_id = 1;</code>
     *
     * @return string
     */
    public function getStudentId()
    {
        return $this->student_id;
    }

    /**
     * Generated from protobuf field <code>string student_id = 1;</code>
     *
     * @param string $var
     * @return $this
     */
    public function setStudentId($var)
    {
        GPBUtil::checkString($var, True);
        $this->student_id = $var;

        return $this;
    }

}

require __DIR__ . '/vendor/autoload.php';
$test = new \Order\Test();

执行上面的代码时,我无法获得“测试消息”;

但是,当我从“测试”类中删除“扩展”时,我就可以了。

这是怎么了?一些代码在__construct之前运行?

nginx/error.log中,看到以下错误:

74988#0:* 380 kevent()报告了一个关闭的连接(54:对等连接重置),同时从上游读取响应标头,客户端:127.0.0.1,服务器:local.grpc.develop,请求:“ GET / HTTP / 1.1”,上游:“ fastcgi://127.0.0.1:9000”,主机:“ local.grpc.develop”


在cli中运行时,我得到了[1] 37548 segmentation fault

1 个答案:

答案 0 :(得分:0)

 parent::__construct($data);

这应该在结构中代码的顶部,以便应用程序父结构具有优先级。然后,您的调试应该会更容易。当您在父构造之前退出时,您会杀死该应用。