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
我对 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