Задать вопрос
@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
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@Artray
echo foo([$object, "func"]); // MyClass::func
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SerafimArts
@SerafimArts
Senior Notepad Reader
$object содержит __invoke, а значит является callable. Функция foo просто вызывает его.

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽