Плюси і мінуси просторів імен vs включати / вимагати в PHP?


20

Нещодавно я почав використовувати простори імен у PHP. Коли я вперше побачив їх, я подумав, що їх синтаксис некрасивий, і я ніколи їх не використовую. Однак я створив автозавантажувач (spl_autoload_register), який робить це так, що мені ніколи більше не потрібно писати оператор включення / вимагати.

Мені подобаються простори імен, але чи є якась об єктивна перевага над операторами включати / вимагати, чи вони точно такий же метод для досягнення тієї ж мети?


1
Простори імен запобігають зіткнення з сторонніми бібліотеками.
Реакційний

1
На даний момент головна перевага для просторів імен - це автоматичне завантаження. Наприклад, я використовую рядок new \Vendor\Namespace\Class()без запиту на вимогу, що раніше в методі чи класі.
NobleUplift

3
Багато бібліотек PHP використовують автоматичне завантаження без просторів імен. PHP повинен зробити простори імен обов'язковими.
Реакційний

Ніяких аргументів від мене. Я хотів би, щоб усі ці зміни були перелічені тут .
NobleUplift

Відповіді:


21

Простори імен не тільки для класів автозавантаження. Вони також запобігають називанню конфліктів. Насправді, це їх основне призначення.

Скажімо, у вас є проект, який потребує імені класу User, щоб зберігати інформацію про користувачів вашої програми, але плагін також використовує (інший) клас, названий Userдля зберігання інформації. Простори імен дозволяють вам створити свій клас в одному просторі імен (скажімо, MyApp) і дозволити плагіну використовувати інший простір імен (скажімо, CoolPlugin). Код у MyAppпросторі може просто посилатися на User(наприклад, new User();), і так може кодувати у CoolPluginпросторі; кожен отримає очікуваний результат. Коли вам потрібно використовувати код з іншого простору імен, ви просто приставте його. Наприклад, код у CoolPluginпросторі може отримати доступ до Userкласу в MyAppчерезnew \MyApp\User();

Альтернативою є те, що кожному класі потрібна складна назва скрізь , наприклад, class MyApp_Userта class CoolPlugin_User. Простори імен дозволяють вам спрощувати речі більшу частину часу і уникати конфліктів іменувати весь час.

Редагувати: Щоб відповісти на запитання: "Чи є різниця між продуктивністю між ними?"

Не значущий, ні. Я цього не орієнтував, але, мабуть, є різниця на рівні наносекунди. Однак, жертвуючи якістю коду для надзвичайно малих налаштувань продуктивності, це не є хорошою стратегією, тому вам слід використовувати простори імен незалежно. Для порівняльних показників подібних проблем див. PHPbench.com та відповідь StackOverflow .

Ваш код повинен бути неймовірно чітким і неймовірно чутливим до часу (подумайте, як частотна торгівля або управління ядерними реакціями), перш ніж вам потрібно буде турбуватися про мікрооптимізацію її в такому контексті. Якщо це дійсно так, що ви залежать від часу, ви, ймовірно, повинні кодувати в або навіть , а не інтерпретувати мови, як PHP.


1
+1 Я просто зазначаю, що кожен проект починає здаватися, що йому, можливо, не потрібні простори імен, а потім легко розростається до того, що зламати навколо речей, щоб працювати без них, стає смішно. Відсутність просторів імен - це те саме, що оголошення кожної змінної глобальної, що застосовується до класів. На більш великих кодових базах або тих, які використовують ліберальні бібліотеки, це стає загальним безладом.
BrianH

1
Будь ласка, дивіться мою редакцію вище.
еліксинід

2
Я згадав, що я роблю інтерфейс PHP для великого адронного колайдера? Інакше я вважаю, що ця відповідь є достатньою, дякую.
NobleUplift

1
Будь ласка, не створюйте жодних зірок кварків і чорних дір! Радий допомогти.
еліксинід

1
Не хвилюйтесь, тільки дивці. Ми створюємо адронні гармати - я маю на увазі щось наукове, а не збройове.
NobleUplift
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.