xDebug调用nonExisting属性

时间:2015-02-11 08:52:19

标签: php zend-framework xdebug

我对xdebugger有一个奇怪的问题。可以考虑一个合乎逻辑的解释吗?oO?

我有一个班级:

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;
    }.....

这是DB对象的基础。当我使用一个对象通过db适配器填充它时,如:

$entity = new EntityExtendingTheClass($arrayOfData);

现在这里有一个幽灵般的部分,当我正常运行脚本时,我没有任何错误。但是当我用断点运行时,我遇到了这个奇怪的问题:

Property composites not found

奇怪的是。我不喜欢整个项目这个属性。所以没有办法从代码中获取它。

最令人头疼的事情就是当我解决错误时,我接到了一个叫做不存在的财产的电话。我的coude dous没有。

任何sugestions?

更新:

试图让它通过断点(断开时)停止并且没有断点。

最大的问题是,只有当我尝试在创建对象时使用调试器时才会发生这种情况。如果我滑雪它不会破坏...... WTH?

1 个答案:

答案 0 :(得分:1)

Xdebug在调试时分配属性。你可以添加一些东西来检查复合属性吗?

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

将其作为建议扔出去可能有用吗? :)也许您还可以查看xdebug是否已安装,并且只检查该情况下的复合材料?

HTH