require vs autoload

tz-lom

Продвинутый новичок
Духовность™
очень глупый наезд на неймспейсы
технически
This_Is_My_Super_Class
не отличается от
\This\Is\My\Super\Class

вообще ничем не отличается
зато неймспейсы могут содержать в себе и функции,что защищает глобальное пространство имён от вороха функций
внутри неймспейса вызовы получаются короче,и если по какой то причине захотелось заменить имя неймспейса то не надо переписывать все имена функций + классов
 

Духовность™

Продвинутый новичок
технически ... вообще ничем не отличается
технически не отличается, а вот читабельность снижается в разы. По крайней мере для меня.

Когда в type hint стоит This_Is_My_Super_Class разработчик явно видит, что это за тип, к какому модулю относится впрыскиваемый объект и где он физически лежит. Когда в type hint нужно указать класс из пространства имен, то нужно сначала объявить это пространство имен, потом описать явно тип объекта в подсказке типа. Эта процедура, состоящая из двух этапов раздражает. Постоянно приходится обращаться к use что бы понять, к какому модулю относится впрыскиваемый объект, ибо указание типов из НИЧЕГО НЕ ГОВОРЯЩИХ имен типа Person, Amount, Image попросту сбивает с толку.
 

tz-lom

Продвинутый новичок
Когда в type hint нужно указать класс из пространства имен, то нужно сначала объявить это пространство имен, потом описать явно тип объекта в подсказке типа. Эта процедура, состоящая из двух этапов раздражает. Постоянно приходится обращаться к use что бы понять, к какому модулю относится впрыскиваемый объект, ибо указание типов из НИЧЕГО НЕ ГОВОРЯЩИХ имен типа Person, Amount, Image попросту сбивает с толку.
честно говоря я не понял каким боком это относится к PHP
PHP:
function a(OtherNamespace_Classname $var) // объявление функции принимающей класс с префиксом OtherNamespace
function a(\OtherNamespace\Classname $var) //объявление функции принимающей класс из пространства OtherNamespace
function a(Classname $var) // не вышло,т.к. класс не в нашем пространстве имён 

// но :

namespace OtherNamespace {
function a(Classname $var) //а вот теперь из нашего,так мы уберём тонны ненужных уточнений внутри пространства имён , при этом замена имени пространства будет заключаться в изменении одной строчки,а не реплейсу по всему файлу(слабое приемущество,но всё таки)
}
 

korchasa

LIMB infected
Постоянно приходится обращаться к use что бы понять, к какому модулю относится впрыскиваемый объект, ибо указание типов из НИЧЕГО НЕ ГОВОРЯЩИХ имен типа Person, Amount, Image попросту сбивает с толку.
Вообще то это одна из "фишек" неймспейсов - уменьшение длины названий для тех кусков кода, которые "в теме". Например, внутри модуля Logger можно вовсю использовать класс Writer, вместо Logger_Writer. Если короткие имена тебе ничего не говорят или путаються с другими, значит ты зря их экспортировал. Работай с длинными.
 
Сверху