Почему имя класса не возвращается к глобальному имени класса в пространствах имен? - PullRequest
0 голосов
/ 07 марта 2020

Я читал Использование пространств имен: откат к глобальной функции / константе на php. net, и он говорит, что язык разработан следующим образом:

Имена классов всегда соответствуют текущему имени пространства имен. Таким образом, чтобы получить доступ к внутренним или не принадлежащим пространству имен пользовательским классам, нужно обращаться к ним с их полностью определенным Именем .... ..... Для функций и констант PHP вернется к глобальным функциям или константам, если функция с пространством имен или константа не существует.

Мой вопрос: что было бы неправильно, если бы классы могли переходить к глобальным классам, таким как функции и константы, если они не определены в текущем пространстве имен? Каковы будут идеологические или технические трудности этого выбора дизайна?

1 Ответ

1 голос
/ 07 марта 2020

Это связано с автозагрузкой и производительностью.

Из RF C о разрешении пространства имен:

Один примечательный аспект заключается в том, что для классы у нас автозагрузка. Если для ссылки на глобальные идентификаторы можно использовать не полностью квалифицированные идентификаторы, «ленивые» программисты могут пропускать полностью квалифицирующие идентификаторы, даже если они намерены ссылаться на глобальный идентификатор. С автозагрузкой это может вызвать дорогостоящие операции, которые по сути бесполезны.

Для функций, однако, у нас нет возможностей автозагрузки. Это дает преимущество в том, что возврат к глобальному пространству имен не подвергает риску производительности автозагрузку. Таким образом, запасной вариант был бы намного дешевле, но все равно были бы издержки, если бы не сделать преднамеренные ссылки на глобальное пространство имен полностью квалифицированными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...