аргументы — PHP forward_static_call_array в нестатическом контексте класса

Добрый день,

У меня есть следующий тестовый пример, который я не могу заставить работать должным образом.

<?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());
}

Называя это:

  • SubClass :: CallME

Делает это статическим классом. И логически я получаю сообщение об ошибке:

Строгие стандарты: 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'));
?>

-1

Решение

Я думаю, что вы хотите изменить это:

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);
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]