【发布时间】:2015-03-23 10:08:49
【问题描述】:
早安,
我有以下无法正常工作的测试用例。
<?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'));
?>
如你所见,我有两个课程。
1 测试类
这是一个非静态类,被以下对象调用:
$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());
}
调用它:
- 子类::callMe
使它成为一个静态类。从逻辑上讲,我收到一条错误消息:
严格标准:forward_static_call_array() 期望参数 1 为有效回调,非静态方法 SubClass::callMe() 不应在 N:\wamp\www\test\forward_arguments\testclass 中静态调用。第15行的php
2 子类
子类获取参数如下:
public function callMe(){
echo 'YES WE FETCHED : '.PHP_EOL.print_r(func_get_args(), true);
}
现在有了这个设置,错误通知是合乎逻辑的。 而TestClass类变量
private $obj = NULL;
get 完全避免了。
$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'));
?>
【问题讨论】:
-
您期望的输出是什么?您当前的输出是什么?此外,您的类中没有任何静态函数!
-
我知道。我想使用类变量 $obj 所以它应该是
forward_static_call_array('$this->obj->callMe', func_get_args());但这不起作用:-o
标签: php arguments forwarding