Как стать автором
Обновить

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

Ага, всё круто. НО вот представьте ситуацию:
Вы написали приложение (а то и с десяток) с этим автолоадером и стилем которого не придерживается Yii,
а потом решили работать с коллегами вместе, которые уже тоже разобрались с этим «смирились и не парятся» (реально не парятся)
Вероятно для них это будет не удобно… не так ли?
IMHO: для меня точно не удобно, я уже привык и не парюсь.
Ну и с некоторыми IDE будут траблы из-за регистра.
Если работать с коллегами вместе, то должен быть кодестайл. Почему считаете, что им будет неудобно? Я за автолоадер PSR-0, где ns с большой буквы должны быть. Насчет IDE, приведите пример.
Такое ощущение что вы не кодите :)
Строго говоря где в стандарте про регистр первой буквы?
(И по мне так странно если бы это туда включили www.php-fig.org/psr/psr-0/)

IDE пример — phpStorm — перестаёт автокомплитить.

попробуйте use Yii\he(Ctrl+space) = No suggestion
попробуйте use yii\he(Ctrl+space) = yii\helpers
В PSR-0 об этом не сказано, но сказано в PSR-1.

Class names MUST be declared in StudlyCaps.
www.php-fig.org/psr/psr-1/


И меня честно говоря удивляет тот факт, что авторы фреймворка не следуют принятому стандарту, при том что они состоят в группе FIG
Class name != Namespace (тем более в самом PSR-1 «Namespaces and classes»)
Оу, точно…
Тогда мой наезд не засчитан, где там мой пепел для головы?)
В терминологии PHP нэймспейс считается частью названия класса. В частности функция get_class() возвращает имя класса с нэймспэйсом, а на php.net в описании этой функции написано так: Returns the name of the class of an object.
Т.е. можно сделать вывод, что для разработчиков PHP нэймспэйс — это часть имени класса.
Думаю, что именно по этому в PSR стандартах не написано ничего про нэймспейсы, ведь к нэймспейсам должны применяться те же правила, что и к классам.
Проблема только с написанием пространства, потому как
use Yii\Helpers\(Ctrl+space) — предлагает классы.
Я знаю один аргумент за пространства имен с маленькой буквы. Таким образом визуально сразу распознается что есть папка-namespace, а что есть реальное короткое название класса.
Я, как бывший олимпиадник, не могу спокойно смотреть на этот перевод ресурсов…
if (0 === strpos($class, 'Yii\\')) {

Ну почему нельзя было написать
if ('Yii\\' === substr($class, 0, 4)) {
1. Ваш вариант с первого взгляда менее понятный
2. Не поленился, проверил:

$class = 'Yii\\test';
$iterations = 100000;

foreach (range(0, 9) as $iteration) {
    $start = microtime(true);
    for ($i = 0; $i < $iterations; $i++) {
        if (0 === strpos($class, 'Yii\\')) {

        }
    }
    $finish = microtime(true) - $start;

    $startOlympiad = microtime(true);
    for ($i = 0; $i < $iterations; $i++) {
        if ('Yii\\' === substr($class, 0, 4)) {

        }
    }

    $finishOlympiad = microtime(true) - $startOlympiad;

    var_dump($finish);
    var_dump($finishOlympiad);
    var_dump('-------------');
}


Результат:

float(0.03000283241272)
float(0.047005176544189)
string(13) "-------------"
float(0.027001857757568)
float(0.036004066467285)
string(13) "-------------"
float(0.027003049850464)
float(0.032002925872803)
string(13) "-------------"
float(0.027003049850464)
float(0.034003019332886)
string(13) "-------------"
float(0.024001836776733)
float(0.031004190444946)
string(13) "-------------"
float(0.033002853393555)
float(0.035002946853638)
string(13) "-------------"
float(0.027003049850464)
float(0.036003828048706)
string(13) "-------------"
float(0.028002977371216)
float(0.033003091812134)
string(13) "-------------"
float(0.023001909255981)
float(0.034003973007202)
string(13) "-------------"
float(0.027002096176147)
float(0.029002904891968)
string(13) "-------------"


Не экономьте на спичках, тем более что ваш вариант медленнее.
Отлично, вы проверили лучший случай. Теперь осталось проверить худший и средний.
Вот худший:
$class = 'VeryStrangeThirdPartyLibraryName\\This\\Is\\A\\Very\\Long\\Namespace\\Path\\With\\Many\\Parts\\To\\This\\Class';

Что, правда, делать со средним — не совсем ясно.
php 5.3.22
float(0.025063037872314)
float(0.027328968048096)
string(13) "-------------"
float(0.024883985519409)
float(0.027305841445923)
string(13) "-------------"
float(0.024459838867188)
float(0.027107000350952)
string(13) "-------------"
float(0.024399995803833)
float(0.027168035507202)
string(13) "-------------"
float(0.024492979049683)
float(0.027180910110474)
string(13) "-------------"
float(0.024927854537964)
float(0.027140855789185)
string(13) "-------------"
float(0.024561166763306)
float(0.027137041091919)
string(13) "-------------"
float(0.024441957473755)
float(0.027230024337769)
string(13) "-------------"
float(0.024482011795044)
float(0.027484893798828)
string(13) "-------------"
float(0.024868011474609)
float(0.027168989181519)
string(13) "-------------"


Не думаю, что у нас тут будет когда-либо затык, так что спор в любом случае безсмысленный.
(В продолжение нанооптимизаторских бесед) Тестировать лучше на 5.4+ — он умеет интернировать строки ;)
Странные какие-то времена… Ну да ладно, не буду спорить, PHP — не мой язык.
Оптимизация из серии «если утром встать с правильно ноги, то на работу будет идти на один шаг меньше».
Копирование и создание строки будет медленнее, если конечно у вас строка не километровая.
Substr создаёт новый zval, это тоже тормоз. Правильное решение, достойное нанооптимизатора — strncmp ;)
О, спасибо, как-то я пропустил эту функцию при просмотре списка строковых функций.
Да я тоже забыл про эту функцию.
Оригинально, но это лишь дело предпочтений. Я использую неймспейсы только в нижнем регистре(в 1-й версии, надо об этом статью как-то написать). Только как-то топорно автолоадер вешается, в YiiBase же было что-то для этих целей…
ln -s yii Yii и далее рекурсивно, шах и мат :)
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации