作为 Inspire 答案的补充:
class Foo {
public function __isset($name) {
echo "public function __isset($name)\n";
return 'bar'===$name;
}
public function __get($name) {
echo "public function __get($name)\n";
return 'bar'===$name ? 0 : NULL;
}
}
$foo = new Foo;
echo empty($foo->foo) ? ' empty' : ' not empty', "\n";
echo empty($foo->bar) ? ' empty' : ' not empty', "\n";
Run Code Online (Sandbox Code Playgroud)
输出是
public function __isset(foo)
empty
public function __isset(bar)
public function __get(bar)
empty
Run Code Online (Sandbox Code Playgroud)
对于第一个属性 (foo),empty() 只调用了 __isset(),返回 false ->empty($foo->foo)===true
对于第二个属性 (bar),调用了 __isset() 并且返回 true。然后通过 __get() 获取该属性并将其解释为布尔值(请参阅http://docs.php.net/language.types.type-juggling)。由于 (bool)0 是false,empty() 也true返回empty($foo->bar)
我认为一般来说您会发现以下是 PHP 的等效内容:
isset($variable[0])
Run Code Online (Sandbox Code Playgroud)
例如,如果变量是字符串,则会检测到该字符串为空。对于大多数原始类型(如果不是全部),它的工作方式类似。
| 归档时间: |
|
| 查看次数: |
5061 次 |
| 最近记录: |