PHP菊花链式意外行为

时间:2017-06-21 06:59:32

标签: php

出于好奇,这更像是一个问题。我使用的是php 5.6安装,我有一个复杂的类,它依赖于几个laravel模型。

现在对象的正常流程为:

  • __构建体()
  • preInit()
    • beforeRender()
  • 的init()
  • processStuff()

这一切都按顺序调用。

在beforeRender()中,laravel模型被分配给内部受保护变量以便快速访问。我有一个$this->getData()的访问者,只有

protected function getData() 
{
      return $this->storedData;
}

在beforeRender();

中分配了$this->storedData

模型有一个方法getLore()

如果我在processStuff()中执行此操作,则尝试获取非对象属性时出错(null)

protected function processStuff() {
    $lore = $this->getData()->getLore();
}

但如果我这样做

protected function processStuff() {
     $data = $this->getData();
     $lore = $data->getLore();
}

它可以顺利运行,当我之后将其更改回来时,它也可以毫无障碍地工作。

我确实使用opcache,这可能是opcache或php本身的某种优化/预测错误吗?或者它本身是什么东西,这可能是菊花链的麻烦,如试图处理多个核心上的多个语句,它成为竞争条件?

我只是好奇是什么让这种苛刻的链接条件有时会失败,但不是所有时间都会失败。

所有对象都会被初始化并分配。

0 个答案:

没有答案