我的情况并不复杂,但花了我一段时间才弄清楚。
class A {
private $data = array('key' => 'value');
public function __get($name){
return $this->data[$name];
}
}
$a = new A();
var_dump(empty($a->key)); // TRUE
我想这是因为
empty
出于某种原因检查类结构,而不是在方括号内运行代码。为什么不按预期评估此代码?这是错误还是为什么不能正常工作?
最佳答案
首先,在PHP中,您需要使用$this->
来访问类变量,例如$data
(因此是$this->data
而不是$data
)。在使用另一种语言一段时间后,很容易忘记,但是如果您在开发错误报告时未将代码设置为E_ALL
,则应该将其设置为。在开发过程中将其设置为E_ALL
可使您更轻松地发现(潜在的)此类错误,并提高代码质量。
为了解决您的实际问题,为了确定是否为魔术变量设置了变量,您需要添加__isset
魔术方法(manual):
<?php
class A {
private $data = array('key' => 'value');
public function __get($name){
return $this->data[$name];
}
public function __isset($name){
return array_key_exists($name, $this->data);
}
}
$a = new A();
var_dump(empty($a->key)); // it's FALSE now
关于php - empty()和魔术方法__get(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25574791/