Почему символ подчеркивания преобразуется в разделитель каталогов в стандарте PSR-0?


PSR-0 (https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md ) стандарт указывает, что символ подчеркивания в имени класса должен быть преобразован в разделитель каталогов в соответствующем имени файла.

Мне это не кажется хорошей идеей, так как это создает множество ошибок, когда кто-то, кто не знает стандарта, невинно использует подчеркивание в имени класса, и внезапно загрузчик не может найти класс и все виды странных ошибок появляются (см., Например, Эту проблему с переполнением стека: Ошибка сопоставления Symfony2.1: родители классов())

Поэтому я предполагаю, что для этой "функции" должна быть какая-то причина (историческая совместимость с какой-то библиотекой?). Мой вопрос: кто-нибудь знает, почему это было введено в стандарт PSR-0?

 5
Author: Community, 2012-07-28

3 answers

Подчеркивания использовались в те времена, когда PHP еще не поддерживал пространства имен. "Правильно" организованный проект следует соглашению о размещении файлов в именах так же, как и структура каталогов.

Это просто какое-то общее "правило" для организации файлов в проекте.

Итак, если у вас есть структура каталогов:

root
  Name
    Package
      MyClass.php

Люди привыкли делать:

class Name_Package_MyClass {}

Но теперь, когда у нас есть пространства имен, это становится:

namespace Name\Package;

class MyClass { }

Это просто руководство по стилю кодирования, которое обеспечивает что все делают одно и то же.

Итак, что делает PSR-0, так это сопоставляет как старый, так и новый стиль пространства имен с именем файла.

 4
Author: PeeHaa, 2012-07-27 22:08:16

PHP поддерживает пространства имен с версии 5.3, ранее наиболее распространенным соглашением было использование подчеркивания в качестве разделителя пространства имен (каталога), например: My_Project_ClassName отображалось как /path/to/my/My/Project/ClassName. Я считаю, что обратная совместимость является основной причиной.

 1
Author: Crozin, 2012-07-27 22:11:18

Имейте в виду, что стандарт PSR-0 был написан для нескольких конкретных проектов и не обязательно является лучшим вариантом для вашего собственного проекта. Как говорится на их сайте: "Если другие люди хотят перенять то, что мы делаем, они могут это сделать, но это не цель". PSR-0 очень ограничен, я бы не стал использовать его только потому, что другие люди. Подумайте, чего вы на самом деле хотите от своего проекта и будет ли это выгодно для вас.

 1
Author: Tom B, 2013-04-15 08:24:05