Задать вопрос

Как называть классы, при использовании пространства имен?

Я создаю небольшой проект, в котором будет несколько классов. Каждый класс будет отвечать за работу с определенным типом данных - строками, массивами и т.д.
Вот пример такого класса
<?php
namespace MyPHPProject;

class Strings
{

function test()
{
echo 'Вызван метод test который что то делает';
}

}


Далее я использую этот класс для работы, например в файле index.php. Я подключаю свой класс.
Я также подключаю другой класс\классы написанные другими людьми.
И вот тут возникает "проблема". Так как мое имя класса Strings весьма распространено, оно совпало с именем класса у другого разработчика.
Проще говоря мы, ориентируясь на PSR, назвали пространство имен по разному, а классы одинаково.

И теперь у нас есть 2 варианта:
1) Писать пространство имен полностью, что не очень красиво AnotherPHPProject\Strings()
2) Использовать псевдонимы, что не очень понятно as AnotherStrings()

<?php
include_once __DIR__.'/Strings.php'; //
include_once __DIR__.'/AnotherPHPProject/Strings.php';
//include_once __DIR__.'/AnotherPHPProject/Strings.php' as AnotherStrings;

use MyPHPProject\Strings;
use AnotherPHPProject\Strings;

$strings1=new Strings();
$strings2=new AnotherPHPProject\Strings(); 
//$strings2=new AnotherStrings(); 

$strings1->test();


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

Как называть классы, при использовании пространства имен?
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
То есть неймспейс свою задачу не выполнил.

Выполнил. С этим расчетом он и вводился — резолвить одинаковые названия. Вы СМОГЛИ в скрипте использовать одинаковые названия, что и нужно было от неймспейсов… подключили один класс из одного неймспейса и другой с таким же названием

А то, что вы хотите опустить неймспейс (игнорировать его суть) — это вопросы к вам… то, что можно неймспейс выносить в секцию use — это оптимизация, чтобы визуальный мусор неймспейсов убрать… очевидно, при явном конфликте эту оптимизацию не допустить

Вы можете или с неймспейсом юзать оба
Или добавить as

use MyPHPProject\Strings as MyStrings;
use AnotherPHPProject\Strings;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Vitsliputsli

Писать пространство имен полностью, что не очень красиво AnotherPHPProject\Strings()

Не устаю писать, красиво это не когда мало букв, а когда все понятно с первого взгляда.
IDE подставит за вас длинный namespace. А по нему отлично видно, что данный класс не внутренний, а подключенная внешняя зависимость.
А вот алиасы часто использовать не очень хорошо, т.к. по нему сразу не видно, что это за класс.
Ответ написан
Adamos
@Adamos
Классы надо называть так, как завещано патриархами программирования - с использованием существительного. Ваше String - скорее прилагательное, вы забыли указать, что именно делает этот класс со строками. StringParser? StringContainer?
StringTester, наконец, по тому огрызку кода, что тут приведен :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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