<?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
。それとも、ここで何か不足していますか?