【发布时间】:2016-03-21 18:36:49
【问题描述】:
当我尝试这个时:
<?php
class myParent {
public function __call($method, $params) {
echo "from __call";
}
public function __callStatic($method, $params) {
echo "from __callStatic";
}
}
class mySon extends myParent {
public function bar() {
myParent::foo();
}
}
(new mySon())->bar();
我希望这个输出:from __callStatic ...
相反,它给出:from __call。
谁能解释一下为什么?
编辑: 确切地说,我想知道为什么如果我删除 __call 函数,那么它会触发 __callStatic 以及是否有办法在声明 __call 时触发 __callStatic .
【问题讨论】:
-
(new mySon()) 是一个对象。您在该对象上调用了 bar() 方法,该方法为对象的父类调用 foo(),该父类是对象本身的一部分。在任何时候,它都不会对任何东西进行静态引用。
-
如果你删除
extends myParent- 你会得到你需要的,因为类不再连接。
标签: php