Я работаю над пакетом, который будет иметь разные классы. Скажите Имя пакета Languages
и классы будут как English
, French
и т.п.
Теперь, если я объявлю класс как
namespace Language;
class English
{}
Как пространство имен поможет упаковать всю вещь и позволить пользователю класса в любом случае вызвать имя пакета в своем файле вызывающего абонента?
В PHP вы можете включить пространство имен в имя класса при создании экземпляра объекта:
$language = new \Language\English();
или вы можете Импортировать класс, использующий ключевое слово «use»:
use \Language\English;
$language = new English();
Все это довольно хорошо задокументировано Вот.
Пространства имен обеспечивают уровень направления для определенных идентификаторов, что позволяет различать идентификаторы с одинаковым точным именем.
простой пример, приведенный на [PHP Manual][1]
В качестве конкретного примера, файл foo.txt
может существовать в обоих каталогах /home/greg
И в /home/other
, но две копии foo.txt
не может сосуществовать в одном каталоге. Кроме того, для доступа к foo.txt
файл за пределами /home/gre
g каталог, мы должны добавить имя каталога к имени файла, используя разделитель каталогов, чтобы получить /home/greg/foo.txt
,
затем можно получить доступ к этому классу Language/English
в файле вызывающего для вашего кода. это будет отличать его от любого другого класса English
,
Пространства имен помогают разделить ваш код логически, и в отдельных файлах и папках.
Клиент вашего English
а также French
классы могут выглядеть так:
<?php
use Language\English;
use Language\French;
class Speaking
{
public function greetInEnglish()
{
$english = new English();
$english->sayHello();
}
public function greetInFrench()
{
$french = new French();
$french->sayHello();
}
}
Для упаковки вашего кода вы должны использовать менеджер пакетов. Лучший менеджер пакетов php — композитор http://getcomposer.org
Большинство пакетов composer используют пространства имен, а автозагрузчик просматривает источник некоторых пакетов на github, чтобы получить представление об этом. Написание пакетов для композиторов — отличный способ модульности вашего кода и его распространения.
Надеюсь, это поможет!
мы определим константу, функцию с пространством имен:
namespace Language;
class English
{
public function Testclass(){
return __METHOD__;
}
}
$lang = __NAMESPACE__.'\\Testclass'
$obj = new $lang;
echo $obj->Testclass();