Пространства имен классов PHP против префиксов

#php #class #namespaces #naming-conventions #prefixes

#php #класс #пространства имен #соглашения об именовании #префиксы

Вопрос:

Просто небольшой вопрос о ваших предпочтениях использования пространств имен PHP или префиксов классов.

 <?php
// ----- namespace -----
use MyNamespace;
$object = new NamespaceObject;

// ----- prefix with PR -----
$object = new PF_Object; //or
$object = new PFObject;
  

Что предпочитают разработчики? Я знаю, почему использование пространств имен может принести большую пользу приложениям, но, по моему собственному мнению, также может стать помехой в PHP.

Спасибо!

Комментарии:

1. Это слишком раздутый вопрос. Вероятно, что разработчики, пришедшие из мира ООП-программирования с пространством имен, больше любят Python или Java предпочтут 1-е, другие, вероятно, выбрали бы 2-е… Знаете, все зависит… Сколько людей, столько и мнений.

2. Что ж, все, кто использовал настоящий язык ООП, скорее всего, избегают синтаксиса пространства имен PHPs. Но помимо этого личного предпочтения, это скорее вопрос того, находитесь ли вы на одном из 5% серверов с поддержкой php 5.3.

3. @mario 5% использует php 5.3, это шокирующая статистика: O

4. Хотя это было в конце прошлого года. К настоящему времени оно вполне может превысить 10.

Ответ №1:

Объединить use с псевдонимом:

 use MyNamespaceFoo as Foo;

$object = new Foo;
  

Это также полезно вот так:

 namespace MyDebugStuff;
use MyProductionStuffFoo as BaseFoo;

class Foo extends BaseFoo {}
  

Ответ №2:

Почему вы считаете пространства имен препятствием?

использование префиксов классов показалось мне чем-то вроде взлома для реализации «в коде» — механицизма для реализации пространств имен.

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

Рассмотрим этот популярный, но открывающий глаза пример, который позволяет устаревшему коду использовать пространство имен:

 // Using native namespace features to shorten class prefixes

<?php
use Sabre_DAV_Auth_Backend_PDO as AuthBackend;
use Zend_Controller_Action_Helper_AutoComplete_Abstract as AutoComplete;

$backend = new AuthBackend();
?>
  

Комментарии:

1. Я просто ненавижу символ, используемый для разделения пространств имен в PHP, из-за которого создается ощущение, что вы ссылаетесь на местоположение в системе Windows. Вы также внесли большой вклад в обработку классов пространств имен, спасибо!

Ответ №3:

Очевидно, что больше нет необходимости использовать символ подчеркивания для подделки пространств имен, поэтому я полагаю, что вопрос сводится к «хорошая ли идея использовать символы подчеркивания в именах классов».

IMO, ответ отрицательный, во-первых, потому что это выглядит некрасиво (IMO), а во-вторых, потому что некоторые старые загрузчики классов могут запутаться в имени класса, которое включает подчеркивание.

Ответ №4:

ну, если вы работаете PHP 5.2.X , у вас есть только вариант 2

но если вы работаете PHP 5.3.X , вы могли бы использовать оба.

В моем запущенном случае PHP 5.3.X я бы использовал функцию, предлагаемую новой версией языка. Чтобы провести аналогию, скорее всего, вы используете JAVA 1.6 и не используете дженерики (или что-то вроде)