Должен ли я использовать пространства имен в Symfony2? - PullRequest
0 голосов
/ 30 июля 2011

Я только начал изучать Symfony2 (после использования 1.x в течение последних 2 лет), и я немного удивлен тем, насколько больше требуется печатать. Я знаю, это звучит лениво, но мне нравится тот факт, что я могу быстро запустить и запустить что-то в 1.x с гораздо меньшим набором текста. Мне интересно, возможно ли автозагрузка классов без использования пространств имен. Все мои попытки сделать это (используя схему именования PEAR) потерпели неудачу.

Если я упускаю что-то очевидное и буду стрелять себе в ногу, избегая использования пространств имен, буду признателен за любой совет:)

В ответ на @KingCrunch: Я бы хотел избежать объявлений namespace и use, которые, кажется, очень часто используются в Symfony2 просто для ускорения моего кодирования. Если честно, я раньше не использовал пространства имен в PHP. Я понимаю их преимущества на бумаге (и я привык использовать пакеты на других языках), но я никогда не сталкивался с проблемой при , а не использовании их в проектах Symfony 1.x. Вот почему я сделал заявление «Если я что-то упустил ...» выше.

Ответы [ 3 ]

3 голосов
/ 31 июля 2011

Вы должны понимать, что пространства имен не требуют больше ввода, чем имена в стиле PEAR.На самом деле они могут сохранять некоторые символы.

См. Эти два примера:

С PEAR-стилем:

class Foo_Bar_Baz extends Foo_Bar_Parent
{
    public function __construct()
    {
        $obj = new Some_Long_Class_Name;
        $obj2 = new Some_Long_Class_Name;
    }
}

С пространствами имен / использование:

namespace Foo\Bar;

use Some\Long\Class\Name;

class Baz extends Class
{
    public function __construct()
    {
        $obj = new Name;
        $obj2 = new Name;
    }
}

С пространствами имен, но без использования:

namespace Foo\Bar;

class Baz extends \Foo\Bar\Class
{
    public function __construct()
    {
        $obj = new \Some\Long\Class\Name;
        $obj2 = new \Some\Long\Class\Name;
    }
}

Как видите, если вы используете полные имена классов каждый раз (последний пример), у вас просто есть еще один символ на имя класса, ведущий \.Если вы используете операторы использования и все, то чем короче вы повторяете одни и те же имена классов в одном файле, тем меньше вы используете классов, находящихся в одном и том же пространстве имен.

TL; DR:В любом случае, если вы ленивы, получите IDE, например PhpStorm, которая автоматически завершит все эти операции и добавит операторы использования.

1 голос
/ 30 июля 2011

Краткий ответ: да, пространства имен являются обязательными, если вы хотите использовать Symfony2.

Причина этого заключается в том, что автозагрузчик класса sf2 построен на использовании пространства имен. Теоретически, вы можете написать свой собственный автозагрузчик и обернуть его вокруг sf2, но я думаю, что это будет более хлопотно, чем использование namespace и use;)

Поначалу меня это тоже огорчало, и мне не очень нравилось, как это используется. Но как только я привык к этому и начал видеть преимущества, все наоборот. Я использую sf2 для своих собственных проектов и должен использовать sf1.4 на работе (надеюсь, ненадолго), и каждый раз, когда я переключаюсь с sf2 на sf1.4, я испытываю чувство «о, не снова».

0 голосов
/ 25 ноября 2011

NS настолько сложен, что вы даже можете ошибиться, пытаясь объяснить кому-то преимущества:

Я знаю, что смысл ответа не в том, чтобы получить код "perfect", но все же ... Вы забыли включить оператор использования для класса "Class":

namespace Foo\Bar;

use Some\Long\Class\Name;
use The\Extended\Class;
...

Вот почему пространства имен ужасны - нужно всего лишь забыть 1, чтобы выдать ошибку; и, даже если во всем проекте есть только 1 класс с именем «Class», PHP не знает, что он там есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...