Что такое пространства имен?

Что такое Пространства имен PHP?

Что такое Пространства имен в целом?

Ответ Неспециалиста с примером был бы большим.

229
задан alex 5 December 2011 в 17:50
поделиться

5 ответов

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

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

Сценарий

Предположим, вы пишете приложение, которое использует функцию с именем output () . Ваша функция output () принимает весь HTML-код вашей страницы и отправляет его пользователю.

Позже ваше приложение станет больше, и вы захотите добавить новые функции. Вы добавляете библиотеку, которая позволяет вам создавать RSS-каналы. Эта библиотека также использует функцию с именем output () для вывода окончательного канала.

Когда вы вызываете output () , как PHP узнает, использовать ли вашу функцию output () или функцию output () библиотеки RSS? Это не так. Если вы не используете пространства имен.

Пример

Как решить, имея две функции output () ? Простой. Мы вставляем каждую функцию output () в собственное пространство имен .

Это будет выглядеть примерно так:

namespace MyProject;

function output() {
    # Output HTML page
    echo 'HTML!';
}

namespace RSSLibrary;

function output(){
    # Output RSS feed
    echo 'RSS!';
}

Позже, когда мы захотим использовать разные функции, мы будем использовать:

\MyProject\output();
\RSSLibrary\output();

Или мы можем объявить, что мы находимся в одном из пространств имен, а затем мы можем просто вызвать это пространство имен output () :

namespace MyProject;

output(); # Output HTML page
\RSSLibrary\output();

Нет пространств имен?

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

552
ответ дан 23 November 2019 в 03:43
поделиться

Пространство имен позволяет разместить под именем часть кода и избежать конфликтов имен с классами, функциями и константами.

Это позволяет вашему коду жить в этом пространстве имен.

PHP использует несколько противоречивый символ \ для отображения уровней пространства имен. Люди поднялись с оружием в руках, потому что он также используется как побег.

Чтобы использовать пространство имен в PHP, используйте что-то вроде этого в верхней части файла.

namespace my\namespace;

Вы можете найти гораздо больше информации в официальной документации PHP для пространств имен .

19
ответ дан 23 November 2019 в 03:43
поделиться

Существуют такие методы, как пространства имен в других языках программирования (например, пакеты в Java). Они используются, чтобы иметь возможность иметь несколько классов с одинаковыми именами в проекте.

Из документации php ( http://www.php.net/manual/en/language.namespaces.rationale.php ):

Что такое пространства имен? В самом широком смысле пространства имен - это способ инкапсуляции элементов. Во многих местах это можно рассматривать как абстрактное понятие. Например, в любой операционной системе каталоги служат для группировки связанных файлов и действуют как пространство имен для файлов внутри них. В качестве конкретного примера, файл foo.txt может существовать как в каталоге / home / greg, так и в / home / other, но две копии foo.txt не могут сосуществовать в одном каталоге. Кроме того, чтобы получить доступ к файлу foo.txt вне каталога / home / greg, мы должны добавить имя каталога к имени файла, используя разделитель каталогов, чтобы получить /home/greg/foo.txt. Тот же принцип распространяется на пространства имен в мире программирования.

9
ответ дан 23 November 2019 в 03:43
поделиться

Пространство имен в основном позволяет вам помещать код в контейнер. Это предотвратит проблемы с двумя функциями (а также классами и переменными) с одинаковыми именами.

Они полезны при работе с большими приложениями, чтобы предотвратить проблемы с частями кода, имеющими одно и то же имя.

Например, допустим, нам нужны две функции под названием «TheMessage». Оба они будут печатать (выводить эхо) разные сообщения каждый. Обычно это вызывает синтаксическую ошибку, поскольку у вас не может быть двух функций с одинаковым именем.

Чтобы исправить это, вы можете поместить эти функции в отдельные пространства имен. Это позволит вам использовать обе функции без каких-либо ошибок.

2
ответ дан 23 November 2019 в 03:43
поделиться

Пространство имен работает как каталог. Вы знаете, как можно поместить файлы в каталог с такими же именами, что и файлы в родительском (или любом другом) каталоге? Что ж, пространство имен позволяет вам делать это в приложении для переменных, функций и классов.

Некоторое время назад в PHP была небольшая тенденция к созданию огромных классов статических функций. Единственный способ вызвать любую из этих функций - это указать перед вызовом имя класса. Это была примитивная попытка создания пространств имен, но с не очень большими преимуществами.

1
ответ дан 23 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: