2017-01-17 2 views
-5

Я получаюфункция Php бросает "неопределенную константу" при использовании в `array_map`

Примечания: Использование неопределенной константы Орд - предполагаемой 'Ord'

На линии

array_map(ord,str_split($string)) 

Что удивительно, так как ord является php function

И если бы я был переписать вызов как:

array_map(function ($x) {return ord($x);},str_split($string)) 

код работает без каких-либо предупреждений/уведомлений

Любая идея, почему это?

+1

Использовать 'array_map (" ord ", str_split ($ string))' –

+2

[Пример использования обратных вызовов] (http://www.php.net/manual/en/language.types.callable.php) –

+0

И причина, по которой этот код фактически работает (минус уведомление), заключается в том, что неопределенная константа обрабатывается, как если бы это была строка с кавычками. В итоге ваш вызов функции 'array_map()' получает правильные параметры. – Phylogenesis

ответ

6

Имя функции должно быть passed как строки параметру обратного вызова.

Функция PHP передается по ее имени в виде строки. Любая встроенная или определяемая пользователем функция может использоваться, за исключением языковых конструкций, таких как: array(), echo, empty(), eval(), exit(), isset(), list(), print или unset() ,

array_map("ord",str_split($string)) 

Edit на основе редактируемого вопроса.

Анонимные функции: не имя некоторых других вызываемых функций, поэтому их не нужно передавать в виде строковых литералов. Это требование предназначено только для передачи имен определенных вызываемых функций, а не анонимных функций.

Помимо общей пользовательской функции, анонимные функции также могут передаваться параметру обратного вызова.

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

+0

Это неверно, если бы я должен был переписать вызов как 'array_map (function ($ x) {return ord ($ x);}, str_split ($ string))' он работал бы без предупреждения –

+0

Это полностью верно , Закрытие - это не имена функций. См. Руководство снова * Помимо общей пользовательской функции, анонимные функции также могут быть переданы параметру обратного вызова. * Настолько, что замыкания также называются анонимными функциями, прежде всего потому, что у них нет имени –

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