php Глобальные функции в пространстве имен. Как определяется имя функции без слеша
Primary tabs
В учебнике Котерова написано следующее:
В файлах где объявлено пространство имен, для обращения к стандартным функциям, например к строковой функции strlen(), нам потребуется воспользоваться абсолютным именем \strlen(), чтобы сообщить php, что strlen() является функцией глобального пространства имен
, а не \php7
И тут же следует пример:
<?php namespace PHP7; function strlen($str) { return count(str_split($str)); } // Это php7\strlen echo strlen("Hello world!") ."<br/>"; //Это стандартная функция strlen() echo \strlen("Hello world!") ."<br/>"; ?>
В этом коде меня смущает стандартная функция str_split(), которая почему-то написана без обратного слэша. Правильно ли я догадываюсь, что в этом случае срабатывает тот же принцип, что и в областях видимости в javaScript - то есть, если программа не находит объявления функции в этом пространстве имен, она поднимается на уровень выше и берет её уже оттуда?
- Log in to post comments
- 4848 reads
vedro-compota
Sun, 04/01/2018 - 16:05
Permalink
В общем случае -- сразу в глобальном пространстве
В данном случае "подъём" (точнее его сильно урезанный аналог) происходит действительно только на один уровень выше (так как у вас только одна доп. секция к глобальному пространству -- лишь "php7"), но в общем случае "прыжок" происходит сразу в гловальное пространство:
т.е. можно сказать, что в php вообще нет как такового подъёма (например для классов), а для функций есть сразу в глобальное пространство.
_____________
матфак вгу и остальная классика =)
Voronve
Sun, 04/01/2018 - 16:17
Permalink
Все понятно, спасибо )
Все понятно, спасибо )