PHP:empty不适用于getter方法

Ale*_*lex 13 php getter class

我有一个像"getter"这样的方法

function getStuff($stuff){
  return 'something';
}
Run Code Online (Sandbox Code Playgroud)

如果我检查它empty($this->stuff),我总是得到FALSE,但我知道$this->stuff返回数据,因为它适用于回声.

如果我检查它,!isset($this->stuff)我得到正确的值,条件永远不会执行...

这是测试代码:

class FooBase{

  public function __get($name){
    $getter = 'get'.ucfirst($name);
    if(method_exists($this, $getter)) return $this->$getter();
    throw new Exception("Property {$getter} is not defined.");
  }
}

class Foo extends FooBase{
  private $my_stuff;

  public function getStuff(){
    if(!$this->my_stuff) $this->my_stuff = 'whatever';
    return $this->my_stuff;
  }

}

$foo = new Foo();
echo $foo->stuff;

if(empty($foo->stuff)) echo 'but its not empty:(';
if($foo->stuff) echo 'see?';
Run Code Online (Sandbox Code Playgroud)

Jos*_*vis 23

empty()__isset()首先调用,只有它返回true它才会调用__get().

为您支持的每个魔法属性实现__isset()并返回它true.

function __isset($name)
{
    $getter = 'get' . ucfirst($name);
    return method_exists($this, $getter);
}
Run Code Online (Sandbox Code Playgroud)