Новини високих технологій
» » Namespace PHP: приклад. Як використовувати простору імен в PHP?

Namespace PHP: приклад. Як використовувати простору імен в PHP?

26-02-2018, 10:58
634
Змінна визначає значення, але може бути посиланням на іншу змінну і мати її значення. В процесі виконання алгоритму мінлива зазвичай приймає безліч різних значень. Константа зберігає тільки одне значення. Об'єкт непередбачуваний: йому властиво мати структуру, зміст і безліч особливостей.
Простір імен – це сукупність змінних, констант, об'єктів, функцій і інших конструкцій, створених розробником, на які можна посилатися через ім'я цього простору імен.

Імена: сфера опису даних та алгоритмів

Імена елементів (змінних, констант, об'єктів, функцій і інших конструкцій розробника) ніколи не перетинаються. Будь-який збіг імен PHP інтерпретує як серйозну помилку, а у випадках, коли він не може однозначно ідентифікувати проблему, розробник отримує код, який працює не так, як було задумано, або біле поле в браузері.


Всі імена всіх даних повинні бути унікальні, оскільки глобальне простір. Імена об'єктів і функцій також не повинні повторюватися, але сфера глобальної видимості переривається в тілах методів об'єктів і функцій. Тут функціонує своє, локальне простір імен і ніщо не заважає іменувати щось всередині так само, як позначено зовні.
Наведений приклад – класика, якщо не звертати уваги на ключове слово namespace: все, як завжди. Працює другий include. Префікс NameSpaceTwo перед іменами функцій уточнює, з якою вставки береться код. Якщо з першої функції прибрати ключове слово global і операцію $iExt = 1; перенести на сходинку вище, то про значення змінної 100 не буде знати ні перша функція, ні друга.

Простору імен: безліч сфер опису

У наведеному прикладі є загальний файл, який використовує дві вставки. У кожній вставці є одна і та ж функція scCheckName(). Яку з них вибрати, вирішує програміст допомогою імені того простору, який актуально в потрібний момент часу і в потрібному місці коду.


Той факт, що одне і те ж ім'я присутня в загальному коді (після злиття вставок) не призводить до помилки з тієї простої причини, що кожен файл вставки позначений своїм власним унікальним ім'ям. У першому файлі все, що буде в ньому описано, зв'язується з ім'ям NameSpaceOne. У другому файлі всі описи будуть прив'язані до імені NameSpaceTwo. Допускається будь-яке дублювання імен в обох файлах, але в кожному з них будь-ім'я елемента (змінної, константи, об'єкта, функції) має бути унікальним.

У цьому прикладі зміна імені простору імен у виклику функції scCheckName() позбавила змінну $iExt другого простору імен від зміни. Саме тому в прикладі спеціально виділено слово "змінена" – зміна насправді не відбулося. Значення змінної залишилося колишнім.

Тестування і множинне проектування

Ці найпростіші приклади показують: можна легко спростити розробку складних проектів, підвищити ефективність, продуктивність і прискорити роботу. Однозначно, відразу з'явилися перші ідеї застосування простору імен: безпечне тестування скриптів шляхом заміни "робочих" просторів на тестові аналоги; безпечне проектування великими колективами розробників – шляхом надання їм індивідуальних" просторів опису елементів. Насправді простір імен має набагато більш важливе значення. Мова PHP, простір імен і кожен елемент опису (змінна, константа, об'єкт) вже дуже давно надали розробнику можливість самостійно маніпулювати синтаксисом і семантикою.
Конструкції мови і загальне правило сучасного програмування: "зрозуміло" – виконано – є протиріччя – "білий екран" на професійного розробника "не діє". Багато програмісти навіть не в курсі, в якому місці шукати повідомлення PHP про помилку, коли в браузері нічого немає (чисте біле поле). На певному етапі свого розвитку програміст мислить синтаксисом і семантикою PHP, «працює» автоматом і результат: власний синтаксис і власна семантика в межах дозволеного. Білий екран – відразу однозначна реакція професійного програміста і помилка ліквідована. Навіщо витрачати час на дебагер і перегляд лода помилок?

Об'єкти, масиви і простору імен

Можна сказати, що змінні, константи та функції – це минуле століття, але вони використовуються в розробці об'єктів. Хороший код – це коли алгоритм представлений взаємодіючими об'єктами, а не послідовністю коректних конструкцій.
Якщо використовувати масиви об'єктів, маніпулювати ідеєю стека і останнім (першим) елементом масиву, то можна отримати динаміку: об'єкти самі "вирішують", як повинен працювати функціонал сайту в залежності від ситуації. На PHP простір імен – це змінна особливого роду, представлена власним унікальним ім'ям, часто складно складеним. Ім'я простору імен вживається в коді. Якщо це рядок, то можна один простір замінити на інше в ході виконання скрипта. Якщо імена namespace PHP використовує як значення змінних, то це ще більш семантично навантажений синтаксис, ще більш сильний, ніж масиви об'єктів. Об'єкт – це структура і зміст, які характеризуються єдністю. Простір імен – це безліч об'єктів, елементів і зв'язків між ними.
Не можна проводити експерименти на працюючій системі, але завдяки namespace PHP надає можливість моделювати реальну працюючу систему в іншому просторі для цілей: подальшого розвитку; тестування; технічного обслуговування та ін. Якщо абстрагуватися від синтаксису, запропонованого розробниками PHP, і уявити простору імен як глобальні складні системи об'єктів, то горизонти можливостей розширюються багаторазово.

Синтаксис і застосування простору імен

Слово namespace PHP приймає тільки в першій сходинці коду кожного файлу. Всі описи повинні йти тільки за ним. Синтаксис включає в себе тільки ім'я, означене в звичайному розумінні імені. Суттєво використовувати правильні слова, що відображають зміст. Краще, коли ім'я довге, але в ньому є те, що дає чітке розуміння, про яке просторі йдеться, що воно робить, що описує, що приймає або для чого створено. Простору можуть бути вкладені один в одного до нескінченності, але цим не варто зловживати. Ім'я повинно бути зрозумілим, вкладеність – обґрунтована, а послідовність імен просторів повинна мати логіку. В застосуваннях use і namespace, PHP допускає складне кодування, але завжди, коли є така можливість, краще обійтися простим варіантом.
Загальне правило: namespace – опис і це один файл, use – це імпорт простору в скрипт використання та призначення йому псевдоніма (короткої посилання).

Простий приклад автозавантаження класів (об'єктів)

В задачі є об'єкт для маніпулювання рядками, стилями оформлення елементів сторінки (опису CSS), об'єкт дати, файлової системи і бази даних. Сенс реалізації – створити за цих п'яти позиціях прості інтерфейси з метою використання потрібних можливостей тільки через методи цих об'єктів. Ніякого прямого використання функцій і конструкцій мови не допускається. У такій задачі використовується на PHP автозавантаження класів. Namespace розглядається як сукупність об'єктів, що перебувають у певному місці файлової системи. Зазвичай, всі об'єкти розміщуються в файловій системі за змістом, по папок і файлів з певною назвою.
У коді зліва позначено створення потрібних п'яти об'єктів, але де саме вони знаходяться, не зазначено. У коді праворуч наведено текст автозавантажувач (основний скрипт), який при завантаженні класів (об'єктів) автоматом підставляє потрібний шлях до місця розміщення об'єкта і розширення файлу .php.

Приклад безлічі просторів імен

Бібліотека PhpOffice /PhpWord – якісний приклад використання складної ієрархії безлічі просторів імен. Папка елементів містить практично весь спектр елементів, доступних при формуванні документа *.docx (MS Word), інші папки містять необхідний інструментарій для роботи з елементами, параграфами і таблицями.
Власне, бібліотека поміщено в папку проекту з тієї причини, що простір функціональності PhpOffice /PhpWord потрібно доповнити конкретним інструментарієм і в кінцевому підсумку створити власний варіант аналогічного продукту.

Завантаження безлічі класів різних просторів імен

Використання PHP namespace autoload, коли необхідно завантажувати множини класів, а ієрархія розробленої системи об'єктів досить складна і представити її складно, призводить до необхідності створення жорстких конструкцій. Орієнтація розробника (використовує продукт для продовження робіт) можлива тільки в контексті семантики (розуміння проекту), яка представлена належними поєднаннями слів, що відображають реальне значення і взаємозв'язок об'єктів.
Необхідність застосування бібліотеки в індивідуальному проекті призводить до вирішення завдання, як поєднувати простору імен розробника і авторів PhpOffice /PhpWord. Кращим є розміщення даного продукту (його просторів та об'єктів) у власному просторі проекту. Істотно відзначити, що без модифікації просторів імен даного продукту на рівні його абстрактних елементів і завантаження класів обійтися не вдасться. Це свідчить, що на PHP namespace використання внутрішніх просторів імен може бути виконано недостатньо абстрактно і універсально.

Файлова система і локалізація просторів

По суті, простору імен – це «накреслення» шляхи у файловій системі до потрібного об'єкту. Використання імен файлів в якості імен об'єктів природно і звично. Використання імен папок іменування просторів імен – об'єктивно. «Дерев'яна» організація інформації достатньо громіздка у застосуванні і ускладнює розробку, але вона є природним представленням для систем об'єктів. Проблема полягає в тому, що етап розробки представлений певним редактором коду, який поєднує в собі і видиме представлення папок і зміст конкретної папки, але ще немає такого редактора, який би забезпечував наскрізний рух по об'єктам і по папках.

Проблема абстрактності і універсальності

Прийнято свідомістю розробника і об'єктивно насправді: об'єктно-орієнтоване програмування (ООП) дає абстракцію і можливість маніпулювати інформацією відповідно до її реальної семантиці; простору імен відображають становище скриптів, об'єктів і частково сенсу проекту у файловій системі Фактично, з'єднавши абстракцію ООП на імена об'єктів (файли) і наклавши її на файлову систему (папки) з адекватним формуванням імен namepace (шляхи + імена), можна управляти формуванням просторів імен в процесі виконання скрипта. Програмування вже набуло потужну динаміку розвитку, але, якщо перевести процес і навантаження етапи розробки з текстового редактора (в якому створюються скрипти і розміщуються по деревах папок) на ідею формування такого коду, який сам себе дозволяє удосконалювати і розміщувати в потрібному місці файлової системи – програмування підніметься на нову висоту.
Цікаво по темі
Перевантаження операторів в С++: основи, приклади
Перевантаження операторів в С++: основи, приклади
У будь-якій науці є стандартні позначення, які полегшують розуміння ідей. Наприклад, в математиці це множення, ділення, додавання і інші символьні
Об'єкти та масиви PHP: array push & pop
Об'єкти та масиви PHP: array push & pop
Стекова організація даних зручна для створення динамічної функціональності. Масиви на PHP, функції push & pop на перших і останніх елементах
Як визначити кількість елементів у масиві PHP?
Як визначити кількість елементів у масиві PHP?
При використанні масивів має значення кількість містяться в них даних. Особливості синтаксису і логіки мови PHP дозволяють динамічно визначати
Javascript Object: створення об'єктів і робота
Javascript Object: створення об'єктів і робота
Об'єкти jаvascript - це, насамперед, об'єктна модель сторінки - DOM. Функціональні можливості мови також реалізовані в якості об'єктів, і
JavaScript, масиви: опис
JavaScript, масиви: опис
jаvascript – сучасна мова програмування, він унікальний у частині синтаксису і семантики. Має специфіку...