php - PHP 和魔术方法进入自己的类
问题描述
我的代码:
class Test {
private $a = 5;
public function __set($name, $value)
{
// TODO: Implement __set() method.
echo $name . "#" .$value."<br>";
}
public static function do_test(){
$x= new Test();
$x->a=5;
}
}
$x=new Test();
$x->a=3;
Test::do_test();
输出:
a#3
函数 staticdo_test()
不调用魔术方法 ( __set
)。为什么?谢谢!
解决方案
魔术方法仅在属性不可访问时调用(包括如果它不存在)。你的财产是private
。Test::do_test
可以访问该private
属性,因为您正在从具有相同类的上下文中访问它。它不必是同一个实例(即$this
or self
),它只需要是同一个类 context。一个类可以访问它的private
属性,即使它不是同一个实例。因此,该访问不需要您的魔术方法。
推荐阅读
- python - Pygame 的运行方式与不同的 python 解释器不同
- r - Tidymodels:使用 R 中的函数 tune_grid() 进行 10 倍交叉验证的可调模型
- java - 在 maven pom.xml 中更改传递依赖项的版本
- css - Flexbox 容器不包括 margin-bottom
- html - 我无法理解错误是什么?
- javascript - 有没有办法向已经初始化的指标添加新标签?
- java - 无法反序列化 `java.util.ArrayList 的实例
` 在 [Source: (BufferedInputStream); 的 START_OBJECT 标记之外 行:1,列:1] - google-apps-script - Google 为组织外的特定服务编写 Web 应用权限脚本
- c# - 如果找到特定值,则读取 .txt 文件,然后返回
- java - GWT 应用程序编译问题 - 错误,状态 503