2016-10-03 4 views
4

Alded чтение документации по Anonoymous функциям в PHP Я сталкиваюсь с чем-то особенным синтаксисом.Как работать анонимная функция в PHP

Это утверждение выполняет анонимную функцию в одной строке, но я не понимаю, почему:

echo (function() { 
    return 'hi'; 
})(); 

Я понимаю, что эта функция возвращает строковый тип данных и echo'ing его, но я не уверен в том, что() delmoners вокруг анонимной функции. Может ли кто-нибудь объяснить?

+0

Чтобы анонимная функция могла быть несколько строк? – Phoenix

+0

@Phoenix Что это значит? Я не понимаю вас – MaximPro

+0

Анонимная функция похожа на литерал для функции. Если int literal создает значение int, анонимная функция создает объект функции, не присваивая ему имя – Phoenix

ответ

1

Вместо того, чтобы напрямую передавать значение методу, вы можете создавать анонимные функции.

$example = array(1,2,3); 
(function() use ($example) { return $example[0] -1; })(); 

The() разделители используются как BODMAS в математике, где (4 * 2) + 2 будет 10. Вы говорите компилятор вы хотите установить закрытие перед его выполнением.

Длинная версия будет

$closure = function() { .... 
$closure(); 

Это работает с экземплярами класса и другие варианты также как:

(new Object)->method(); 

(сделать это первым) сделать это после того, как вы получите результат того, что сделал первый

+0

Вместо добавления нового ответа обратите внимание, что в соответствии с http://php.net/manual/en/class.closure.php анонимная функция дает объект замыкания, что делает его похожим на '(new Object)()' , –

+0

, когда его 12:56 утра я не могу сказать, что такие вещи блестящие, но я буду придерживаться вашего подхода к будущим ответам @JonStirling – KDOT

+0

Интересный ответ !!! Для дополнительного, что вы можете сказать об этом коде: 'echo" start ".true? «if»: «else». «end»; /// выводить «if», когда я могу записать этот код следующим образом: «echo» start ». (true?« if »:« else »).« end »; /// output «startifend» нужно в объяснении – MaximPro

2

Это способ определить и вызвать функцию. Это поддерживается только PHP7 +.

Альтернатива для PHP5.3 + будет

call_user_func(function() { 
    echo "Hi"; 
}); 

Итак, если вы хотите, чтобы определить функцию на лету, так сказать, и использовать его сразу - это путь ,

+0

. Я, вероятно, не дал мне понять: я говорил об этом синтаксисе, подобном javascript. Не стесняйтесь редактировать мой ответ соответственно, моя команда на английском языке для этого плохо. –

Смежные вопросы