@storm-coder

Уточнение типа в ООП. Где ошибка?

Где в приведенном примере ошибка и как её пофиксить?

class MyClass{
	function func(){
		return __METHOD__;
	}
	static function staticFunc(){
		return __METHOD__;
	}
	function __invoke(){
		return __METHOD__;
	}
}

$obj = new MyClass();

// Ожидается то, что можно вызвать (callable)
function foo(callable $x){
	if(func_num_args() == 2){
		$m = func_get_arg(1);
		return $x -> $m();
	} elseif(is_array($x)){ /*var_dump($m);*/
		return $x[0]::$m[1](); // err
	} else{
		return $x();
	}
}
echo foo($obj, "func"); // MyClass::func
echo foo(["MyClass", "staticFunc"]); // MyClass::staticFunc
echo foo($obj); // MyClass::__invoke
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@galaxy
Парсер такое воспринимать не научен (да и писателю я бы по рукам надавал).
return $x[0]::{$x[1]}();
(это помимо того, что очевидно $x и $m перепутаны были после четвероточия)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DollyPapper
@DollyPapper
При вызове
echo foo(["MyClass", "staticFunc"]); // MyClass::staticFunc
$m не определяется никак
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы