Как работает пространств имен в PHP?
пространства имен были реализованы начиная с версии PHP 5.3.0, как способ "обернуть элементы".
и В самом деле никогда не понимал истинного концепции ним, и всегда я един с автозагрузки классов.
может Кто-нибудь объяснить мне, просто, как работает пространства имен, почему они используются, и если они имеют что-то автозагрузки классов?
Например:
namespace App\Http\Controllers; // usando namespace
use App\User; // usando autoload
2 answers
Пространства имен полезны, главным образом, чтобы избежать столкновения имен.
Были реализованы в PHP 5.3.
Очень часто можно увидеть библиотек более ранних версий PHP, используя шаблон, который заключается в использовании - underline
в имени класса, чтобы избежать конфликтов.
Это было необходимо, потому что, как возникали многие библиотеки, имена начали получать "дополнительную" по учетной записи может быть конфликтов имен в общем.
Ярким примером является создание класс с именем Client
. По крайней мере, почти все библиотеки, которые я установил в проекте имеют это имя. Именно здесь и вступает в пространства имен.
Мы Можем видеть, например, как если resolvia эту проблему раньше.
, Например в старых версиях:
Zend_Server_Client
Новые выпуски:
Zend\Server\Client
В PHP версии 5.6 и они становятся еще более полезными, поскольку благодаря новой функции use function
, стало легче иметь также хранилища функция.
Например:
class WallaceMaxters\Helpers;
function print_r($valor)
{
echo '<pre>';
\print_r($valor);
echo '</pre>';
}
Это функция, которую я создал вызов print_r
" не будет иметь столкновения с print_r
", счет имен. Однако, чтобы использовать его в версиях, предшествующих php 5.6
, вам придется сделать что-то вроде:
WallaceMaxters\Helpers\print_r($_POST);
Или:
use WallaceMaxters\Helpers as h;
h\print_r($_POST);
Но на PHP 5.6, так как классы, можно создать alias
локальной для этой функции.
use function WallaceMaxters\Helpers\print_r as pr
pr($_POST);
Autoload
Автозагрузка классов-это функция добавлена, чтобы классы были загружаются (include
и require
) автоматически, как только созданы.
Таким образом, вместо того, чтобы вам не приходилось включать каждый раз, когда класс, который будет создавать экземпляр, вы просто установите правила, глобальный класс нагрузки.
Один из примеров - PSR4, которого я люблю глубоко.
Стандарт, который широко используется в библиотеках, которые могут быть установлены с помощью Composer;
Стандартам
По умолчанию, что большинство хранилищ используют для своих библиотек, что использование пространства имен::
NomeDoFornecedor\NomeDaBiblioteca\NomeDaClasse
Например:
namesace Laravel\Database;
class Eloquent {}
Пространства Имен используются для группировки элементов(типов, констант и функций в php), как правило, это определяется родство между ними. Так как класс объединяет свойства и методы для решения задачи(ответственность) с namescape происходит то же самое, но в более широкие или, другими словами, он определяет, какие "компоненты" этого модуля.
Пространства имен в php это не так практично, как packges java, преимущество будет загрузить по например, весь модуль i18n, попробуйте классов для форматирования дат, валютных ценностей и модуль сохранения, который предоставляет различные классы для чтения и записи информации на различные типы технологий, таких как базы данных, реляционные, NOSQL, LDAP, etc.
И В PHP7 есть способ слегка улучшена загрузка группа класса
use app\persistencia\{DBRelaciona, DBNoSQL, LDAP};