Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Вызов анонимной функции из статического массива.
J1upuk  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 37693
На форуме: 3 года, 5 месяцев, 12 дней
Карма: 1





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 и работать с ним - то анонимная функция отрабатывает и вернёт нам нужный объект. Что не так?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 2 дня
Карма: 70




Попробуй так
public static function get($key)
{
return self::$container[$key]->__invoke();
}


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
J1upuk  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 37693
На форуме: 3 года, 5 месяцев, 12 дней
Карма: 1




Arh
Хм, работает, требую объяснения почему?) Что с того что я сделал свойство статическим, что начало не устраивать интерпретатор, ведь до этого выполняло как функцию и без __invoke?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 2 дня
Карма: 70




J1upuk
Цитата
почему?

хз =)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11783
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 10 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 10 дней


включи нормальный вывод ошибок
там перед Fatal Error, вообще-то, идет еще Notice: Undefined variable: container
проблема в синтаксисе

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

return $closure();
}


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
J1upuk  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 37693
На форуме: 3 года, 5 месяцев, 12 дней
Карма: 1




Invis1ble
Но почему ошибки нет когда массив и методы не статические, и работаем с объектом DI? Почему она андефейнед, когда она очень даже дефайнед, ведь с __invoke почему то срабатывает?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11783
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 10 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 10 дней


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

Цитата (Invis1ble @ 8.11.2015 - 00:09)
проблема в синтаксисе



--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
J1upuk  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 37693
На форуме: 3 года, 5 месяцев, 12 дней
Карма: 1




Invis1ble
Да уж. Незнаю в чём разница между:

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

и

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


Это как:

$a = 5;
echo $a;

и

echo $a = 5;

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

Я понимаю ты не многословен, но хотелось бы для тех кто в танке...
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11783
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 10 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 10 дней


Цитата (J1upuk @ 8.11.2015 - 00:22)
Где именно ошибка в синтаксисе?

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

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


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
J1upuk  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 37693
На форуме: 3 года, 5 месяцев, 12 дней
Карма: 1




Invis1ble
Спасибо, наверное пора ставить IDE.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 16 дней
Карма: 111




J1upuk у тебя ServiceLocator скорее чем Di =)


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса