У меня возникает эта проблема. При использовании функций обратного вызова
Class My_Class { public function my_function() { $pad = function($value) { return str_pad($value, 2, '0', STR_PAD_LEFT); }; function pad_function($value) { return str_pad($value, 2, '0', STR_PAD_LEFT); } array_map($pad, range(0,100)); //This fails with an exception "Invalid opcode 153/1/8." array_map("pad_function", range(0,100)); //This works ok } }
Я использую PHP версии 5.3.3-7.
Любые идеи, почему это происходит?
Заранее спасибо!
Наконец, проблема заключалась в использовании ускорителя.
Версия 1.0-dev из маркеров eaccelerator при выполнении кода. Версия 0.9.6.1 eaccelerator не сбой с кодом.
Опоры отдельно, $pad
никогда не определяется.
Тогда array_map
не будет вызывать вашу $my_pad_function
лямбда $my_pad_function
, потому что вы передали строку my_pad_function
качестве первого параметра, my_pad_function
PHP на поиск функции с именем my_pad_function
: это отличается от вызова лямбда, хранящегося в $my_pad_function
.
В любом случае, я советую вам не называть все «my_function», «myPrettyFunction», «myPointlessNameVar»: давать значащие имена даже в коде детской площадки, ваша цель будет более ясной.
Одна последняя вещь:
lambdas : PHP = lipstick : pig