PHP中的empty()的神奇功能是什么?

时间:2010-03-12 08:30:38

标签: php magic-function

不应该是__isset,因为isset()empty()

不同

4 个答案:

答案 0 :(得分:17)

正如this page所说:

  

__ isset()通过在不可访问时调用isset()或empty()来触发   属性。

对于empty()

,没有专门的魔术方法

如果__isset()返回true,则empty()将调用__get()来检查属性的值。

答案 1 :(得分:4)

作为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";

输出

public function __isset(foo)
 empty
public function __isset(bar)
public function __get(bar)
 empty

意思是第一个属性(foo)empty()只调用返回false的__isset() - > empty($foo->foo)===true
对于第二个属性(bar),调用了__isset()并返回true。然后通过__get()获取属性并将其解释为布尔值(请参阅http://docs.php.net/language.types.type-juggling)。由于(bool)0为false,因此empty()也会为true

返回empty($foo->bar)

答案 2 :(得分:0)

我认为通常你会发现以下是PHP的等价物:

isset($variable[0])

例如,如果变量是一个字符串,则会检测到该字符串为空。对于大多数原始类型(如果不是全部),它的工作方式类似。

答案 3 :(得分:0)

如果您只是测试是否存在类变量,那么

不会property_exists()为您工作吗?