empty的一个bug
2015-08-31
先看一段代码例子:
class x {
public function __get($k) {
return 1;
}
public function __isset($k) {
return true;
}
}
$x = new x();
var_dump($x->b);
var_dump(empty($x->b));
这个返回 1 false
把__isset的代码注释掉,例子为:
class x {
public function __get($k) {
return 1;
}
//public function __isset($k) {
// return true;
//}
}
$x = new x();
var_dump($x->b);
var_dump(empty($x->b));
返回变为 1 true
原因为:
empty() will call __isset() first, and only if it returns true will it call __get().
Implement __isset() and make it return true for every magic property that you support.
也就是empty在__isset存在并且返回true 的时候才会调用__get。