@storm-coder

Type-hint. Возвращает не то, что ожидается. Где ошибка?

В примере: echo foo($object, "func"); должен вернуть - MyClass::func, а возвращает MyClass::__invoke.
Спасибо.
class MyClass{
	function func(){
		return __METHOD__;
	}
	static function staticMethod(){
		return __METHOD__;
	}
	function __invoke(){
		return __METHOD__;
	}
}
$object = new MyClass();

function foo(callable $x){
	return $x();
}

echo foo($object, "func"); // MyClass::func (возвращает MyClass::__invoke)
echo foo(["MyClass", "staticMethod"]); // MyClass::staticMethod
echo foo($object); // MyClass::__invoke
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@Artray
echo foo([$object, "func"]); // MyClass::func
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SerafimArts
@SerafimArts
Senior Notepad Reader
$object содержит __invoke, а значит является callable. Функция foo просто вызывает его.

Получаем:
foo($object, 'func');

Тоже самое что и:
$object(); // Вызов метода __invoke
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы