Добрый день,
У меня есть следующий тестовый пример, который я не могу заставить работать должным образом.
<?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('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.php в строке 15
подкласс извлекает аргументы следующим образом:
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'));
?>
Я думаю, что вы хотите изменить это:
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);
}
}
Других решений пока нет …