Время выбирать - ты с PSR или с плохим кодом :-)

confguru

ExAdmin
Команда форума
Коллеги - тут все прогрессивное человечество - пропагандирует PSR

Proposing a Standards Recommendation (PSR):

В комитет вошло достаточно много опытных людей:
Nate Abele: Lithium
Nils Adermann: PhpBB
Brett Bieber: PEAR, PEAR2
Guilherme Blanco: Doctrine, Doctrine2, et al.
Jordi Boggiano: Composer, Packagist
Karma Dordrak: Zikula
Paul Dragoonis: PPI, PPI2
William Durand: Propel, Propel 2
Cal Evans: the community at large
Paul M. Jones: Solar Framework, Aura Project
Andrew Eddie: Joomla
Larry Garfield: Drupal
Robert Lemke: FLOW3
Larry Masters: CakePHP, CakePHP 2
Evert Pot: SabreDAV
Fabien Potencier: Symfony, Symfony2
Andre Romcke: eZ Publish
Paul Scott: Chisimba, C4
Matthew Weier O'Phinney: Zend Framework, Zend Framework 2
David Zülke: Agavi

The following describes the mandatory requirements that must be adhered to for autoloader interoperability.

Mandatory
A fully-qualified namespace and class must have the following structure \<Vendor Name>\(<Namespace>\)*<Class Name>
Each namespace must have a top-level namespace ("Vendor Name").
Each namespace can have as many sub-namespaces as it wishes.
Each namespace separator is converted to a DIRECTORY_SEPARATOR when loading from the file system.
Each "_" character in the CLASS NAME is converted to a DIRECTORY_SEPARATOR. The "_" character has no special meaning in the namespace.
The fully-qualified namespace and class is suffixed with ".php" when loading from the file system.
Alphabetic characters in vendor names, namespaces, and class names may be of any combination of lower case and upper case.
Examples
PHP:
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
Underscores in Namespaces and Class Names
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
The standards we set here should be the lowest common denominator for painless autoloader interoperability. You can test that you are following these standards by utilizing this sample SplClassLoader implementation which is able to load PHP 5.3 classes.

Example Implementation
Below is an example function to simply demonstrate how the above proposed standards are autoloaded.

PHP:
<?php

function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strripos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}
SplClassLoader Implementation
The following gist is a sample SplClassLoader implementation that can load your classes if you follow the autoloader interoperability standards proposed above. It is the current recommended way to load PHP 5.3 classes that follow these standards.

http://gist.github.com/221634

Я пока вижу большой плюс в портировании таких модулей в свое приложение и наоборот.
К примеру Kohana 3.3 - скоро выйдет отдельным релизом - ради этого.
Хотелось бы узнать ваше мнение.
 
  • Like
Реакции: AmdY

magic

lancer
Про прогрессивное человечество ты загнул. Это Framework Interop Group. Пытаются договориться о стандартах для вышеуказанного ПО и только.

Насколько мне известно, эти уважаемые люди так и не смогли проголосовать за первоначальный стандарт кодирования и начали его делить. Все что сделано за три года - проголосовали за метод голосования, выдранный из Symfony SplClassLoader и кусок PSR.

Желающие могут найти их в Google Groups. В общем, все как всегда.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Кхм, давно отказался от привычки именовать Классы_Вот_Так и перешел на подобие, описанного выше, только писал своими ручками. Смысл тот же, но у меня один vendor - Я, потому у меня и пространства имен относятся к ядру Core и приложению Application)

PS: ну попытки стандартизации радуют, только выйдет ли что из этого?
 

Sender

Новичок
Стандартизация это всегда плюс.

Вопрос в том что они все BC будут поди бояться сломать.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Не могу отделаться от ощущения, что все эти люди там занимаются х-нёй. Пытался почитать группу, сломался на предложении сделать общий интерфейс для клиента HTTP.

Аргументация бесподобна (выделение моё):
Doctrine has about 4 projects that need an HTTP client. Currently every
projects implements them itself, which is annoying. We could abstract this
into our "Common" library, however that would mean we would start being a
"http client" vendor. Now personally, i don't care about http clients and
would rather let others do this, however i also don't want to face vendor
lock-in by deciding for any of the many http clients.
перевод для слабых английским
В Doctrine есть примерно 4 проекта, которым нужен клиент HTTP. В настоящее время каждый реализует его своими силами, что раздражает. Мы могли бы выделить его в нашу "общую" библиотеку, но это значит, что мы станем поставщиками "клиента HTTP". Мне лично клиенты HTTP пофиг и я бы лучше оставил эту задачу другим, но я ещё не хочу связываться с vendor lock-in выбрав какой-то один из существующих клиентов HTTP.
Т.е. вот он синдром not-invented-here, при этом аккурат в группе, которая --- теоретически --- должна заниматься облегчением использования чужого кода. "Мы готовы использовать ваш клиент HTTP, если вы реализуете наш интерфейс, который мы вот тут на коленке сляпали, не понимая ничего особо в HTTP, ибо мы больше по базам данных". Там дальше забавное --- комментарии автора Guzzle, который показывает, что на коленке сляпано что-то странное.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
на сайте репозитория есть надпись
Revisions 3874bb jwage 3 years ago
т.е. под временем следует понимать приблизительно это десятиление.
согласен, стоит это внедрять
 

confguru

ExAdmin
Команда форума
В Кохане 3.3 - уже внедрили.
В принципе достаточно удобно стало подключать модули написанные по стандартам.
 

Koc

Новичок
PSR-0 был внедрен едва ли не с первого дня создания репозитория.
 

Absinthe

жожо
ты с PSR или с плохим кодом
Выделенное слово считаю неверным.
Я ни с тем, ни с другим.
К примеру, я нарушаю PSR даже такой мелочью, как K&R форматированием. Поэтому я следую лишь части PSR.
 

DYPA

Настоящая dypa (c)
Выделенное слово считаю неверным.
Я ни с тем, ни с другим.
К примеру, я нарушаю PSR даже такой мелочью, как K&R форматированием. Поэтому я следую лишь части PSR.
тоже считаю что стандарт был притянут за уши к текущему стандарту симфонии.
использование пробелов вместо табов (настраиваемый tab в IDE это отлично), египетские скобки (открывающая скобка мешает комментировать условие например) и наконец zend 1 стиль расположения файлов (Файл.php на уровень выше соответствующей Папки) имхо не удачные решения. каждый день гоняю по проекту CS-fixer - поэтому знаю о чем говорю ;)
 

Absinthe

жожо
Я тут подумал, и понял, что буду следовать любому глупому стандарту(даже отступам в 2 символа в руби следую!), если он будет реально один, и это поможет отлаживать непонятный код.
 
Сверху