Pull to refresh

Разделитель в пространствах имен в PHP

Reading time1 min
Views1.5K
Рекомендую ознакомиться с php internals: endnamespacediscussion

После очередной дискуссии в IRC принято решение использовать символ \ в качестве разделителя в пространствах имен в PHP. Патч готовится, и неизвестно войдет ли он в PHP 5.3 или нет.

С аргументацией можно ознакомиться здесь или здесь

Основная проблема при использовании :: в качестве разделителя по мнению разработчиков заключается в том, что понять что происходит в строке кода
Foo::bar();

станет трудно (это вызов статического метода bar() из класса Foo или вызов функции bar() из пространства имен Foo?). Дополнительным ограничением также является сам интепретатор PHP, который не сможет отличить разрешение имени от вызова статического метода. Избавиться от такой неоднозначности предполагается при помощи символа \.


Однако многие разработчики считают что это неправильный выбор. Символ \ используется в escape-последовательностях. Возникнет проблема с редактированием кода в существующих редакторах и IDE, даже просто на уровне подсветки кода, не говоря о его анализе.

Преимуществом такого подхода по мнению разработчиков патча является то, что \используется\для\разделения\элементов\пути в Windows и потому будет интуитивно понятным для программистов из мира Windows (По результатам опроса большинство читателей php|architect ведут раработку на Windows, а на Unix лишь деплоят работу :-)).

Другими аргументами «за» являются:
  1. \ визуально отличается от ::, и потому при беглом просмотре кода будет легче отличить пространство имен от статического метода
  2. \ вставляется в код при помощи лишь одного на клавишу (не требуется зажимать на shift) в английской раскладке

Tags:
Hubs:
Total votes 38: ↑29 and ↓9+20
Comments155

Articles