Как стать автором
Обновить

Комментарии 10

И вроде документация одна из лучших у веб-ориентированных языков программирования, но чем дальше в лес, тем безответственнее.
НЛО прилетело и опубликовало эту надпись здесь
Отличный повод писать код проще )
На первый взгляд имеется проблема, однако, но на самом деле данное поведение логично и легко объясняется.

В данном случае проблема проистикает из-за того, что Namespaces это compile time фитча — неймспейсы резолвятся на этапе компиляции, а не в runtime. Т.е. поскольку include происходит уже после того, как вы загрузили и создали экземпляр класса, вы загружаете переопределённый метод range. И естественно вам экземпляр класса на тот момент уже отрезолвился на стандартный range, а не на тот, что вы заключили в namespace.

Неймспейсы это вам не простой autoload классов с наследованием — здесь уже не всё так просто. Почему в PHP 5.3 работало, а в 5.4 перестало? Возможно это был баг и его исправили. Или недоработка. Но чисто логически всё абсолютно правильно в 5.4.
Очевидно при использовании функции нужно указывать ее namespace:
public function makeMeRange() { return \range(1,3); }

И это правильно. В PHP5.3 — переопределение global scope функций есть баго-фича. В PHP5.4 это пофиксили, и как бы намекают — пиши код очевидно для других.
Вы не совсем поняли о чём пост. У функций можно не указывать namespace. Главное теперь чтобы объявление функции внутри namespace было до того, как она первый раз вызывается.

www.php.net/namespaces.fallback
В PHP5.4 это пофиксили, и как бы намекают — пиши код очевидно для других.


Интересно было узнать, где они эти намеки намекают. Я не нашел.

Логика в их решении, разумеется, есть. Тут не столько проблема самого изменения, сколько факт умолчания о нем. Именно поэтому статья писалась в информационных целях — предупредить сообщество.
НЛО прилетело и опубликовало эту надпись здесь
Может дело в этом:
Added caches to eliminate repeatable run-time bindings of functions, classes, constants, methods and properties.

php.net/ChangeLog-5.php
Интересная гипотеза. По этому поводу нашел изменения. На досуге можно будет полистать.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории