xDebug 调用不存在的属性

xDebug calls nonExisting properties

我对 xdebugger 有一个奇怪的问题。请问有人能想出一个合乎逻辑的解释吗?oO?

我有一个class:

abstract class AbstractEntity
{

    public $last_modified;
    public $massEntry = array();

    public function __construct(array $properties = null)
    {
        if (!empty($properties)) {
            $this->assignProperties($properties);
        }
    }

    public function __set($property, $value = null)
    {
        if (property_exists($this, $property)) {
            $this->$property = $value;
            return $this;
        }
        throw new InvalidPropertyException("Property $property not found.");
    }

    public function __get($property)
    {
        if (property_exists($this, $property)) {
            return $this->$property;
        }
        throw new InvalidPropertyException("Property $property not found.");
    }
   public function assignProperties(array $properties)
   {
      $availableProps = array_keys(get_object_vars($this));

      foreach ($availableProps as $property) {
          if (isset($properties[$property])) {
              $this->$property = $properties[$property];
          }
      }
    }

    public function toArray()
    {
        return (array) $this;
    }.....

这是数据库对象的基础。当我使用对象通过数据库适配器填充它时,例如:

$entity = new EntityExtendingTheClass($arrayOfData);

现在可怕的部分来了,当我 运行 脚本正常时我没有任何错误。但是当我 运行 它带有断点时,我遇到了这个奇怪的问题:

Property composites not found

奇怪的是。我在整个项目中都没有这个 属性。所以它无法从代码中获取它。

最奇怪的事情是,当我缓存错误时,我收到了一个不存在的 属性 试图被调用的调用。我不知道。

有什么建议吗?

更新:

只是试图通过断点(出于绝望)让它停止并且没有断点。

最大的笑话是只有当我尝试使用调试器创建对象时才会发生。如果我滑雪它不会坏.... WTH?

Xdebug 在调试时分配属性。您可以添加一些内容来检查复合材料 属性?

public function __get($property)
{
    if (property_exists($this, $property) || $property == 'composites') {
        return $this->$property;
    }
    throw new InvalidPropertyException("Property $property not found.");
}

只是把它作为建议扔在那里 - 可能有用吗? :) 也许您还可以检查是否安装了 xdebug,在这种情况下只检查复合材料?

HTH