Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не работает анонимная функция

8
18 июля 2013 года
mfender
3.5K / / 15.06.2005
Какая-то беда с анонимными функциями.

Есть такая штука:

 
Код:
$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);
Характерно, что она работает на удалённом хосте. На локальном не работает.
На локальном 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);
Работает! То есть дело не в версии.

Может я чего не вижу? Все входящие аргументы корректные. Сижу и тупо смотрю битый час на неё как баран на ворота. Поглядите незамыленным глазом...
1
18 июля 2013 года
kot_
7.3K / / 20.01.2000
не работает - ошибку наверное пишет. Или просто говорит - "не хочу работать"? :)
у меня твой код выводит:

 
Код:
0
1
2
3
4
5
6
7
8
9
8
19 июля 2013 года
mfender
3.5K / / 15.06.2005
Цитата: kot_
не работает - ошибку наверное пишет. Или просто говорит - "не хочу работать"? :)
у меня твой код выводит:



Так эта то и у меня работает. Не работает верхняя конструкция.

 
Код:
$linkById = function(&$res = '', $topic_id, $topicsByTop, $topics) use(&$linkById) { ... };
Ошибку не пишет, но при вызове $linkById разумеется происходит Fatal Error (Function name must be string), ибо вызывается функция NULL...

Но меня пуще всего поражает, что эта беда с совершенно идентичным кодом работает на одном серванте (у хостёра), и напрочь отказывается работать на другом (на моей локалке). Чем принципиально могут отличаться PHP там и тут кроме версий?
271
19 июля 2013 года
MrXaK
721 / / 31.12.2002
Наверное потому, что в 5.4
Цитата:
Возможность передачи по ссылке во время вызова функции была убрана.



Так что кусок вашего кода

 
Код:
function(&$res = ''
видимо не отработает, хотя вроде при этом должен выводиться E_FATAL.
8
19 июля 2013 года
mfender
3.5K / / 15.06.2005
Ну так вторая то функция работает, хоть и по ссылке передаются и параметр в функцию, и сам closure-объект.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог