oop — как использовать пространство имен в переполнении стека

Я работаю над пакетом, который будет иметь разные классы. Скажите Имя пакета Languages и классы будут как English, French и т.п.

Теперь, если я объявлю класс как

namespace Language;
class English
{}

Как пространство имен поможет упаковать всю вещь и позволить пользователю класса в любом случае вызвать имя пакета в своем файле вызывающего абонента?

0

Решение

В PHP вы можете включить пространство имен в имя класса при создании экземпляра объекта:

$language = new \Language\English();

или вы можете Импортировать класс, использующий ключевое слово «use»:

use \Language\English;
$language = new English();

Все это довольно хорошо задокументировано Вот.

1

Другие решения

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

простой пример, приведенный на [PHP Manual][1]

В качестве конкретного примера, файл foo.txt может существовать в обоих каталогах /home/greg И в /home/other, но две копии foo.txt не может сосуществовать в одном каталоге. Кроме того, для доступа к foo.txt файл за пределами /home/greg каталог, мы должны добавить имя каталога к имени файла, используя разделитель каталогов, чтобы получить /home/greg/foo.txt,

затем можно получить доступ к этому классу Language/English в файле вызывающего для вашего кода. это будет отличать его от любого другого класса English,

0

Пространства имен помогают разделить ваш код логически, и в отдельных файлах и папках.

Клиент вашего 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, чтобы получить представление об этом. Написание пакетов для композиторов — отличный способ модульности вашего кода и его распространения.

Надеюсь, это поможет!

0

мы определим константу, функцию с пространством имен:

namespace Language;
class English
{
public function Testclass(){
return __METHOD__;
}
}

$lang = __NAMESPACE__.'\\Testclass'
$obj = new $lang;
echo $obj->Testclass();
0
По вопросам рекламы [email protected]