我试图找到在PHP中调用魔法方法的序列.因此写了一个非常基本的程序
class testme
{
public $var1;
/*function __construct()
{
echo'<br/> Constructor called';
}*/
public function __set($name, $value)
{
echo'<br/> You are in sssset function';
}
public function __call($method,$arg)
{
echo '<br/> call method';
}
public function __get($name)
{
echo'<br/> You are in get function';
}
public function __isset($name)
{
echo'<br/> You are in isset function';
}
public function __unset($name)
{
echo'<br/> You are in unset function';
}
function __destruct() {
print "<br/>Destroying " . $this->name . "\n";
}
}
$obj = new testme;
$obj->var1=5;
Run Code Online (Sandbox Code Playgroud)
预期的产出是
You are in set function
Destroying
Run Code Online (Sandbox Code Playgroud)
获得:
You are in get function
Destroying
Run Code Online (Sandbox Code Playgroud)
$obj->var1=5这里我将值设置为类var然后调用它的原因__get.这有什么不对?
你的类中有一个$var1属性,所以__set不会被调用:只有在没有你要设置的属性的属性时才调用它.
删除该公共$var1属性,__set并将被调用.
尽管如此,即使删除该属性,__get仍然会被调用.
如果你在脚本的末尾添加一个echo,你会看到__get是在echo之后被调用的 - 也就是在你的脚本结束之后.
如果你看看你的析构函数方法:
function __destruct() {
print "<br/>Destroying " . $this->name . "\n";
}
Run Code Online (Sandbox Code Playgroud)
你看到这个析构函数试图从一个不存在的属性读取 - 因此调用__get.