我上了课,让我们说'A" A"以及属性private $subModules=Array('func1', 'func2')
,其中func1
和func2
是A类中私有方法的名称。
A类还有一个函数public run()
,我尝试从属性$ subModules运行方法:
class A extends B {
private $subMethods = Array('func1', 'func2');
private function func1($a) { // do something }
private function func2($a) { // do something else}
public function run() {
foreach ($this->subMethods as $fnc) {
call_user_func(array($this, $fnc));
}
}
你能告诉我这有什么问题吗?我尝试做这样的事情:
$this->func1('5');
错误信息是这样的:
Argument 1 passed to A::func2() must be an instance of B, none given
谢谢!
答案 0 :(得分:3)
call_user_func(array($this, $fcn));
应该是:
call_user_func(array($this, $fnc));
话虽如此......你不为私人方法提供参数......以下内容将起作用:
<?php
class A {
private $subMethods = Array('func1', 'func2');
private function func1($a) { echo '1'.$a; }
private function func2($a) { echo '2'.$a; }
public function run($a) {
foreach ($this->subMethods as $fnc) {
call_user_func(array($this, $fnc), $a);
}
}
}
$a = new A;
$a->run('test');
?>