我正在学习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
。
答案 0 :(得分:0)
parent::__construct($data);
这应该在结构中代码的顶部,以便应用程序父结构具有优先级。然后,您的调试应该会更容易。当您在父构造之前退出时,您会杀死该应用。