Недавно наткнулся на эту аккуратную небольшую ошибку или 'функцию' в PHP:
function myCmpFunc($a,$b) {
function inner($p) {
// do something
}
$inner_a = inner($a);
$inner_b = inner($b);
if ($inner_a == $inner_b) return 0;
return ($inner_a > $inner_b ? -1 : 1);
}
В результате фатальная ошибка"не может переопределить функцию внутри в ...", когда вызывается так
usort($myArray, 'myCmpFunc');
Работает безупречно, когда функция inner объявлена вне myCmpFunc
и / или $ myArray содержит не более 2 элементов;)
- редактировать -
как-то
Неустранимая ошибка PHP: невозможно переопределить функцию
Итак, вот мой вопрос:
Можно ли объявить функции в локальной области видимости?
- редактировать 2 -
Возможно, это хорошо работает в PHP 5.3, просто прочитайте, что у него есть замыкания, даааа!