<?php
class foo
{
private $callVar = false;
private $constructorVar = false;
public function __construct()
{
$this->constructorVar = get_class($this);
}
public function __call($methodName, $arguments)
{
$this->callVar = get_class($this);
call_user_func_array(array($this, $methodName), $arguments);
}
protected function method($params)
{
echo('<br>Call var: '.$this->callVar.'<br>Constructor var: '.$this->constructorVar);
}
}
class foo_sec extends foo
{
protected function method($params)
{
echo 'First call: ';
parent::method($params);
echo '<br> Second call: ';
$test = new foo_trd();
$test->method('param2');
}
}
class foo_trd extends foo
{
}
$m = new foo_sec();
$m->method('param');
?>
内实例给出了这样的结果:PHP call_user_func_array例如
First call:
Call var: foo_sec
Constructor var: foo_sec
Second call:
Call var:
Constructor var: foo_trd
此代码应返回当前正在运行的实例的名称,但如果实例是另一个实例中,类名是空的在第二个。这是一个PHP错误或我缺少的其他问题?
换句话说,第二次调用中的Call var
应该是foo_trd
- 不为空。
你的问题并不在于call_user_func_array(),而是使用php调用magic函数__call。 – Rahi
@Rahi但是为什么?这是一个全新的例子 – dfilkovi
@RyanVincent我已经使用另一种方法解决了它,但我徘徊为什么这不是正确的工作原因它应该 – dfilkovi