Пространства имен классов PHP и префиксы - PullRequest
4 голосов
/ 30 мая 2011

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

<?php
// ----- namespace -----
use My\Namespace;
$object = new Namespace\Object;

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

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

Спасибо!

Ответы [ 4 ]

2 голосов
/ 30 мая 2011

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

Префикс класса казался мне своего рода хаком для реализации «в коде» механизма для реализации пространств имен.

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

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

// 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();
?>
2 голосов
/ 30 мая 2011

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

use My\Namespace\Foo as Foo;

$object = new Foo;

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

namespace My\Debug\Stuff;
use My\Production\Stuff\Foo as BaseFoo;

class Foo extends BaseFoo {}
0 голосов
/ 30 мая 2011

хорошо, если вы работаете PHP 5.2.X, у вас есть только опция 2

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

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

0 голосов
/ 30 мая 2011

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

ИМО, ответ - нет, во-первых, потому что это выглядит некрасиво (ИМО), а во-вторых, потому что некоторые старые загрузчики классов могут запутаться в имени класса, которое содержит подчеркивание.

...