Не работает анонимная функция
Есть такая штука:
Код:
$linkById = function(&$res = '', $topic_id, $topicsByTop, $topics) use(&$linkById) {
if ($topic_id == 0){
return;
}else{
$res = $linkById($res, $topics[$topic_id]['top'], $topicsByTop, $topics) . '/' . $topics[$topic_id]['nav'];
}
};
$topic_link = '';
$linkById($topic_link, $topic_id, $topicsByTop, $topics);
if ($topic_id == 0){
return;
}else{
$res = $linkById($res, $topics[$topic_id]['top'], $topicsByTop, $topics) . '/' . $topics[$topic_id]['nav'];
}
};
$topic_link = '';
$linkById($topic_link, $topic_id, $topicsByTop, $topics);
На локальном PHP 5.4.16
На удалённом PHP 5.3.20
Далее пишу для проверки работоспособности такую фигню:
Код:
$func = function(&$val)use(&$func) {
if ($val < 10) {
echo "{$val}<br>";
$val++;
$func($val);
} else {
return;
}
};
$val = 0;
$func($val);
if ($val < 10) {
echo "{$val}<br>";
$val++;
$func($val);
} else {
return;
}
};
$val = 0;
$func($val);
Может я чего не вижу? Все входящие аргументы корректные. Сижу и тупо смотрю битый час на неё как баран на ворота. Поглядите незамыленным глазом...
у меня твой код выводит:
Код:
0
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
Цитата: kot_
не работает - ошибку наверное пишет. Или просто говорит - "не хочу работать"? :)
у меня твой код выводит:
у меня твой код выводит:
Так эта то и у меня работает. Не работает верхняя конструкция.
Код:
$linkById = function(&$res = '', $topic_id, $topicsByTop, $topics) use(&$linkById) { ... };
Но меня пуще всего поражает, что эта беда с совершенно идентичным кодом работает на одном серванте (у хостёра), и напрочь отказывается работать на другом (на моей локалке). Чем принципиально могут отличаться PHP там и тут кроме версий?
в 5.4
видимо не отработает, хотя вроде при этом должен выводиться E_FATAL.
Наверное потому, что
Так что кусок вашего кода
Код:
function(&$res = ''
Ну так вторая то функция работает, хоть и по ссылке передаются и параметр в функцию, и сам closure-объект.