[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вызов анонимной функции из статического массива.
J1upuk

class DI
{
private static $container = [];

public static function set($key, $closure)
{
self::$container[$key] = $closure;
}

public static function get($key)
{
return self::$container[$key]();
}
}


DI::set('request', function(){
return new Kernel\Request();
});

$request = DI::get('request');



Fatal error: Function name must be a string in C:\OpenServer\domains\mvc.loc\protected\classes\Kernel\DI.php on line 15


Причём если сделать свойство и методы не статическими, создать экземпляр DI и работать с ним - то анонимная функция отрабатывает и вернёт нам нужный объект. Что не так?
Arh
Попробуй так
public static function get($key)
{
return self::$container[$key]->__invoke();
}


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
J1upuk
Arh
Хм, работает, требую объяснения почему?) Что с того что я сделал свойство статическим, что начало не устраивать интерпретатор, ведь до этого выполняло как функцию и без __invoke?
Arh
J1upuk
Цитата
почему?

хз =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Invis1ble
включи нормальный вывод ошибок
там перед Fatal Error, вообще-то, идет еще Notice: Undefined variable: container
проблема в синтаксисе

public static function get($key)
{
$closure = self::$container[$key];

return $closure();
}


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

J1upuk
Invis1ble
Но почему ошибки нет когда массив и методы не статические, и работаем с объектом DI? Почему она андефейнед, когда она очень даже дефайнед, ведь с __invoke почему то срабатывает?
Invis1ble
Цитата (J1upuk @ 8.11.2015 - 00:14)
Invis1ble
Но почему ошибки нет когда массив и методы не статические, и работаем с объектом DI? Почему она андефейнед, когда она очень даже дефайнед, ведь с __invoke почему то срабатывает?

Цитата (Invis1ble @ 8.11.2015 - 00:09)
проблема в синтаксисе
J1upuk
Invis1ble
Да уж. Незнаю в чём разница между:

$closure = self::$container[$key];
return $closure();

и

return self::$container[$key]();


Это как:

$a = 5;
echo $a;

и

echo $a = 5;

Смысл один, только на 2 строки размазали. Где именно ошибка в синтаксисе?

Я понимаю ты не многословен, но хотелось бы для тех кто в танке...
Invis1ble
Цитата (J1upuk @ 8.11.2015 - 00:22)
Где именно ошибка в синтаксисе?

интерпретатор неправильно парсит исходный код
может быть можно как-то скобки (фигурные, например) там впендюрить, но у меня не получилось

PS. phpstorm еще на этапе написания кода подчеркнул эту строку

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

J1upuk
Invis1ble
Спасибо, наверное пора ставить IDE.
bestxp
J1upuk у тебя ServiceLocator скорее чем Di =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.