php中的__get()函数行为
|
我试图找到在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;
预期的输出是
You are in set function
Destroying
获得:
You are in get function
Destroying
$obj->var1=5
这里我将值设置为var类,然后为什么要调用__get
。怎么了
没有找到相关结果
已邀请:
4 个回复
蕉衫
内的
做
,您会看到其中包含
。
函数实际上是在
中调用的。这是因为ѭ11是可访问的成员,因此不会调用
或
函数。 从PHP文档: 重载方法被调用 与属性互动时 尚未声明的方法,或者 在当前范围内不可见。 本节的其余部分将使用 条款“无法访问的属性”和 “无法访问的方法”指 声明和 能见度。 由于ѭ11是定义的并且是公共的,因此没有调用magic方法的方法。
校勒魏寡
属性,因此
不会被调用:只有在没有您要设置的名称的属性时,它才会被调用。 删除该公共
属性,将调用
。 即使删除了该属性,仍会调用
。 如果您在脚本的末尾添加回显,则会看到__get的调用要比echo的要晚-也就是说,在脚本结束之后。 如果您看一下您的析构函数方法:
您会看到此析构函数试图从不存在的属性中进行读取-因此调用了
。
博沮富教全
/
。试试
,您会得到预期的结果。 正在调用
,因为您的destruct命令包含未知参数
旗低饶彤
)正在调用27ѭ。该课程没有
成员,因此称为神奇的get。仅当您尝试设置不存在的成员时,才会调用Magical
。
存在,因此不需要
。 你说 我正在尝试找到序列 哪些魔术方法被称为 魔术方法都是通过互斥构造调用的,因此,用相同的操作永远无法调用多个方法。它们不是按顺序调用的。