gpt4 book ai didi

php - __get() 函数在 php 中的行为

转载 作者:可可西里 更新时间:2023-11-01 13:40:38 24 4
gpt4 key购买 nike

我试图找到在 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 的原因。这里有什么问题?

最佳答案

如果您在 __get 中对 $name 执行 var_dump,您会看到它包含 name . __get函数实际上是在__destruct中调用的。这是因为 $var1 是可访问成员,因此不会调用 __get__set 函数。

来自PHP Documentation:

The overloading methods are invoked when interacting with properties or methods that have not been declared or are not visible in the current scope. The rest of this section will use the terms "inaccessible properties" and "inaccessible methods" to refer to this combination of declaration and visibility.

由于 $var1 已定义且公开,因此不会调用魔法方法。

关于php - __get() 函数在 php 中的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5778526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com