Новини високих технологій
» » PHP construct: створення примірників класів

PHP construct: створення примірників класів

29-03-2017, 11:26
927
Ідея об'єктно-орієнтованого програмування значно ширше можливостей PHP в силу його специфіки, але навіть в існуючій реалізації вона дає програмісту необмежені можливості. Конструкція PHP construct - особливий метод класу (об'єкта), який викликається кожного разу, коли створюється екземпляр класу.
Обмеження в тому, що PHP працює в момент формування сторінки. В момент, коли сторінка оновлюється або завантажується інша сторінка того ж сайту, потрібна система об'єктів формується знову з нуля.


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

Опис класу не зобов'язане мати конструктор. Якщо потрібно підготувати початкові значення змінних, відловити момент створення екземпляра класу (об'єкта), провести певні дії над іншими об'єктами, то можна не використовувати синтаксис PHP class construct і писати відповідний код поза методів класу. За логікою об'єктно-орієнтованого стилю програмування кожен клас повинен мати конструктор, більш того слід починати дерево класів з самого абстрактного (абсолютно порожнього) предка. Це пережиток минулого, а не розумна практика. Коли родовід починається значущим класом, який має власні дані і властивості, пов'язані із зовнішніми даними (об'єктами), без function construct PHP не обійтися.
У даному прикладі при створенні (PHP construct) екземпляра класу дати буде викликана дана функція (конструктор). Вона має специфічне ім'я __construct і викликається автоматом тільки один раз, коли створюється екземпляр класу.
В цьому класі передбачена статична змінна $iUniqueNo, яка в кожному новому примірнику такого класу буде мати унікальне значення. Екземпляри класів не мають між собою нічого спільного крім опису в рамках синтаксису PHP і передбаченого розробником взаємодії їх методів.


Спадкування логіки ініціалізації

Кожен об'єкт повинен реалізовувати своє призначення, мати те, що належить йому, і робити те, що повинен. З такої розумної точки зору ініціалізація на кожному рівні родоводу може включати в себе ініціалізацію в кожному предка, що викликається з рівня нащадка.
У цьому прикладі ключове слово parent:: дозволяє викликати конструктор предка з рівня нащадка. Семантика проста. Спочатку повинен виконати свою ініціалізацію предок, потім поточний екземпляр. Перший слід своєю логікою, другий - своєю. Коли кожен об'єкт що займається своєю справою, загальний процес виглядає правильно і зрозуміло. Але не слід це правило вважати нормою для всіх систем об'єктів.
Родовід системи об'єктів "продукти харчування" в самому першому наближенні може мати щось спільне, але продукти молоко, кавун, макарони і крупи хоча і відносяться до такій системі, але виглядають і описуються зовсім по різному. Розробник повинен будувати кожну систему об'єктів від області застосування, а не від того, як це було колись кимось запропоновано. Кожна задача унікальна, вимога використовувати саме на PHP parent construct - не абсолютно.

Загальні і приватні конструктори

За замовчуванням конструктор є загальним і доступний для використання всіма нащадками. Не обов'язково вказувати public function construct, PHP за замовчуванням розглядає все описане, як загальне.
Наскільки має сенс використовувати ключове слово private при описі конструкторів - специфіка завдання, особливість процесу розробки або переваг програміста? З концептуальної точки зору родовід об'єктів може допускати будь-які заборони предків по відношенню до нащадків, але наскільки це розумна логіка сказати важко, в усякому разі, в загальному контексті.

Час життя об'єкта

Концепція об'єктно-орієнтованого програмування ширше можливостей PHP construct class з тієї простої причини, що останні існують тільки в момент формування сторінки, її повторного створення або створення іншої сторінки сайту.
Участь через AJAX jаvascript браузера і належний код на сервері допоможе продовжити життя об'єктів, але в будь-якому варіанті це буде обмежений стиль. PHP надає можливість виконувати скрипт на сервері, коли клієнт "відключився", і "допускати" клієнта назад в скрипт, запущений ним раніше, але це зовсім не той варіант, коли об'єктно-орієнтована програма реалізована на мові С++. В останньому випадку можна побудувати повноцінну систему об'єктів, яка буде існувати вічно", поки програма запущена і працює. Втім, це єдине чим може похвалитися стаціонарний мова програмування начебто З++, С#, Pascal&Delphi. У динамічному інтернет-світі все будується інакше, живе швидше і досягає більшого.

Від серіалізації до самозбереження

Можна знайти історичне обгрунтування терміну "серіалізація" і появи в побуті поняття "магічні методи". Але все набагато простіше. Рівно тим же, чим відрізняється свобода З++ від жорсткості З#, сериализация відрізняється від елементарних понять: записати об'єкт в рядок; прочитати об'єкт із рядка. Оточити сказане магією і міфічними магічними методами - гарно, звучно, але мало практично. Світ інформації цікавий насамперед тим, що все видиме, чутне і відчутне можна описати простим і послідовним текстом.
Інформація завжди була, є і буде рядком символів. Не важливо, який природи. У формальних конструкціях мов програмування природа символів одна - таблиця кодування. Ідея перетворити об'єкт в рядок так, щоб при потребі можна було його відновити з рядка без втрати суті - дуже практична ідея.

Від самозбереження до саморозвитку

Семантика конструктора PHP construct у межах його синтаксису обмежена, але якщо конструктор розробляти з розвивається позиції: початок - створюється абсолютно новий примірник; є поточний стан - створюється вже існуючий екземпляр. Обмеження PHP зважаючи на те, що система об'єктів на ньому існує тільки в момент формування сторінки, знімуться самі собою.
PHP construct: створення примірників класів
Створюючи систему об'єктів при формуванні сторінки сайту, її можна зберегти. Для простоти цей процес не обов'язково називати серіалізацією, можна обмежитися збереженням поточного стану речей (бази даних, файлів), а коли знадобитися знову сформувати цю ж сторінку або створити іншу на цьому ж сайті, просто відновити те поточний стан речей, який вже сформувалося. У такому контексті система об'єктів створюється лише одного разу, а в процесі роботи сайту вона просто розвивається. За такою схемою можна проектувати систему об'єктів як щось адаптується до мінливих умов існування. Самосохраняемая система об'єктів "запам'ятовує" дії відвідувача і стан сторінок, і кожен раз, коли запускається PHP, вона не створюється з нуля, а поновлюється у попередньому стані.
Цікаво по темі
JavaScript, масиви: опис
JavaScript, масиви: опис
jаvascript – сучасна мова програмування, він унікальний у частині синтаксису і семантики. Має специфіку...
Практика використання функції PHP empty()
Практика використання функції PHP empty()
Сучасне програмування давно і успішно маніпулює нетипированними змінними. Тип змінної можна не вказувати ...
Елементи об'єктної моделі Java: абстрактний клас, інтерфейс
Елементи об'єктної моделі Java: абстрактний клас, інтерфейс
Головна думка абстрактного класу полягає в наступному тезі: іноді потрібні не готові класи, а в «сирому» вигляді. Такі заготовки не можна прямо
Ефективне програмування на PHP: масиви в рядок
Ефективне програмування на PHP: масиви в рядок
PHP, як сучасна мова програмування, надає можливість обробляти дані, тип яких можна визначити в момент ...
Javascript Array для збереження необмеженої кількості змінних
Javascript Array для збереження необмеженої кількості змінних
Логічно масив займає проміжне положення між змінними і об'єктами. Практично не слід надавати особливого значення словам. У програмі є змінні і код.
Java: робота з файлами - запис, читання, видалення
Java: робота з файлами - запис, читання, видалення
Переважна більшість програм, написаних на Java, так чи інакше взаємодіють з файлами, зберігаючи і дістаючи звідти потрібну інформацію. Для операцій з