我得到了一些奇怪的结果,最好通过显示代码来解释。
假设我创建了一个具有 3 个方法的 A 类:
添加方法 - 添加其他要在以后使用的 A 类实例
_调用魔术方法 - 添加动态变量和值
_callStatic静态魔法方法 - 这个方法帮助我创建更具可读性的 A 类
所以课程是:
class A_Class {
protected $name;
protected $varList;
protected $childs = array();
protected static $tabCount = 0;
public function __construct($name) {
$this->name = $name;
}
public function add() {
if (func_num_args()) {
$this->childs = array_merge($this->childs, func_get_args());
}
return $this;
}
public function __call($name, $arguments) {
if (count($arguments) > 0) {
$this->varList[$name] = $arguments[0];
}
return $this;
}
public static function __callStatic($name, $arguments) {
return new A_Class($name);
}
}
现在当我使用它时:
$a = A_Class::MyNameA();
$a->someDynamicVar("I am the var data");
$a->add(A_Class::ANotherNameA());
print_r($a);
工作得很好,导致:
A_Class Object
(
[name:protected] => MyNameA
[varList:protected] => Array
(
[someDynamicVar] => I am the var data
)
[childs:protected] => Array
(
)
)
但是,如果我尝试创建类 B 作为从类 A 的继承,如下所示:
class B_Class extends A_Class {
public function __construct($name) {
parent::__construct($name);
$this->add(A_Class::NewAClass());
}
}
并尝试以下操作:
$b = new B_Class("NewBClassInstance");
print_r($b);
我得到一个递归结果:
B_Class Object
(
[name:protected] => B-MAN
[varList:protected] =>
[childs:protected] => Array
(
[0] => B_Class Object
*RECURSION*
)
)
对我来说这很奇怪。
好像 __callStatic 是从 B 类而不是 A 类运行的
有任何想法吗 ?