美好的一天,
我有以下测试用例,我无法正常工作。
<?php
class TestClass{
private $obj = NULL;
public function __construct(){
$this->obj = new SubClass();
}
public function test(){
forward_static_call_array('SubClass::callMe', func_get_args());
}
}
class SubClass{
public function callMe(){
echo 'YES WE FETCHED : '.PHP_EOL.print_r(func_get_args(), true);
}
}
$test = new TestClass();
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
?>
如你所见,我有两节课。
这是一个非静态类,由:
调用$test = new TestClass();
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
在 TestClass()中,我在构造函数中加载了父类中的新类。
public function __construct(){
$this->obj = new SubClass();
}
然后我使用以下行加载一个名为 test()的类方法:
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
然后,此方法使用以下函数获取函数参数: func_get_args() 并使用 forward_static_call_array()
转发所有参数如下:
public function test(){
forward_static_call_array('SubClass::callMe', func_get_args());
}
通过以下方式致电:
使其成为静态类。从逻辑上讲,我收到一条错误消息:
严格标准:forward_static_call_array()期望参数1是有效的回调,非静态方法SubClass :: callMe()不应在N:\ wamp \ www \ test \ forward_arguments \ testclass中静态调用。第15行的php
subClass 获取如下参数:
public function callMe(){
echo 'YES WE FETCHED : '.PHP_EOL.print_r(func_get_args(), true);
}
现在使用此设置,错误通知是逻辑。 和 TestClass 类变量
private $obj = NULL;
完全避免。
$this->obj = new SubClass();
问题在于:
forward_static_call_array('SubClass::callMe', func_get_args());
语法应该不同。但我不知道怎么做。 提前谢谢!
修改
问题是我确实知道如何调用静态类方法。但我不知道如何在加载的类中调用方法。
(由 Rizier123 提供)
<?php
class TestClass{
private $obj = NULL;
public function __construct(){
$this->obj = new SubClass();
$this->obj->SetExtra(array('Karel', 'Anton'));
}
public function test(){
forward_static_call_array([$this->obj, 'callMe'], func_get_args());
}
}
class SubClass{
private $SetVar = NULL;
public function callMe(){
$Array = $this->ArrayStrUp(array_merge(func_get_args(), $this->SetVar));
echo 'YES WE FETCHED : '.PHP_EOL.print_r($Array, true);
}
public function SetExtra($vars){
$this->SetVar = $vars;
}
private function ArrayStrUp($Arr){
foreach($Arr as $key => $value){
if(is_array($value) === true){
$Arr[$key] = $this->ArrayStrUp($value);
}
else{
$Arr[$key] = strtoupper($value);
}
}
return($Arr);
}
}
$test = new TestClass();
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
?>
答案 0 :(得分:2)
我想你想改变这个:
forward_static_call_array('SubClass::callMe', func_get_args());
为:
forward_static_call_array([$this->obj, 'callMe'], func_get_args());
你还必须声明你的方法是静态的,例如:
class SubClass{
public static function callMe(){
//^^^^^^ See here
echo 'YES WE FETCHED : '.PHP_EOL.print_r(func_get_args(), true);
}
}