<?php
class Magic_Methods
{
protected $meta;
public function __construct()
{
$this->meta = (object) array(
'test' => 1
);
}
public function __isset($name)
{
echo "pass isset {$name} \n";
return isset($this->$name);
}
public function __get($name)
{
echo "pass get {$name} \n";
return $this->$name;
}
}
$mm = new Magic_Methods();
$meta = empty($mm->meta->notExisting);
var_dump($meta);
echo "||\n";
$meta = empty($mm->meta);
var_dump($meta);
上面的代码片段对我来说没有按预期工作。为什么第一个 empty() 会忽略 __isset?我明白了:
pass get meta
bool(true)
||
pass isset meta
pass get meta
bool(false)
我希望得到相同的结果或另一个传递__isset
,但不是直接调用__get
. 或者我在这里错过了什么?