Поради для всіх
» » PHP: останній елемент. Масив в динаміці

PHP: останній елемент. Масив в динаміці

Додано: 23.10.16
Автор: admin
PHP - це перспективно і сучасно: якісний синтаксис і можливість робити семантику за межами дозволеного. Реалізація ідей об'єктно-орієнтованого програмування та свобода зміни типу змінної робить реальністю найсміливіші фантазії. Масиви - давня конструкція, а асоціативні - скоріше данина часу, ніж вимога практики. Хоча є достатня кількість завдань, які передбачають створення сукупностей даних заздалегідь не передбаченого змісту (кількість, значення, типи та індекси), які доступні для перегляду і використання у циклах PHP foreach. Останній елемент масиву доступний при будь-якому способі створення. Array - звичайні і асоціативні - дозволяють створювати списки, але в звичайному синтаксис PHP це має обмежене застосування.


PHP: останній елемент. Масив в динаміці

Актуальне значення масиву

Якщо абстрагуватися від індексів і використовувати конструкцію $arData[]= new scField(); //scNumber, scString, scParagraph, де scField() - конструктор абстрактного об'єкта - елемента інформації", який має спадкоємців: числа (scNumber), рядки (scString), фрази (scParagraph), отримаємо на PHP: останній елемент = масив об'єктів, що проявляє свої властивості як актуальний елемент.
PHP: останній елемент. Масив в динаміці
По суті, неважливо, який елемент вважати актуальним, але в цьому випадку доведеться стежити за покажчиком (в PHP - курсор) всередині масиву. Частіше - потрібно мати власний вказівник елемента. Необхідність у курсорі позбавлена ідея PHP "останній елемент = масив". Доступний через функції end() і array_pop(), останній елемент як би делегує свої властивості масиву. Використання array_pop(), крім цього, автоматично переводить масив на попередній елемент і його властивості змінюються відповідно. Цим обумовлюється можливість руху по елементах.


Таким чином, розглядаючи в контексті синтаксис PHP, витягти останній елемент масиву фактично означає використовувати його властивості. Послідовно, поміщаючи і витягуючи елементи, отримуємо динаміку властивостей, динаміку нової структури даних, сформованої в межах доступного синтаксису.

Перший і інші елементи

Є функції для роботи з першим елементом масиву і внутрішнього переміщення покажчика. У звичайному синтаксисі, що реалізує класичну практику програмування, вони застосовні. Щодо створення масивів з динамічно змінним змістом - ні. У програмуванні мова завжди йде про прийняття рішень: змінні приймають значення, оператори умов змінюють хід алгоритму, цикли щось аналізують, в кінцевому підсумку утворюється результат. Якщо перенести центр ваги на власне елемент і надати йому самому приймати рішення, реалізація програми набуває зовсім іншого, осмислений вигляд. Найчастіше саме такий спосіб дозволяє досягти мети, особливо коли мова йде, наприклад, про використання численних тегів документа *.docx, записаних у стандарті Open XML. На PHP отримати останній елемент масиву - це новий сенс і гарні можливості.

Завантаження файлів і динаміка властивостей масивів

Коли сайт надає можливість завантаження будь-яких файлів, зручно використовувати ідею абстрактного об'єкта, наприклад, scFile і нащадків від нього scImage, scDocument, scTabe, які будуть мати однойменні властивості, але різне їх прояв і сенс (зміст). У контексті синтаксису PHP (останній елемент = масив), використовуючи функцію end(), можна використовувати його так, як це визначає останній елемент. Це рішення цікаве тим, що воно інвертує звичайні уявлення і дозволяє переміщатися по структурі даних так, як вона була сформована.
PHP: останній елемент. Масив в динаміці
Таке застосування масивів дає їм зовсім новий зміст. Це передбачено синтаксису PHP, але таке використання відкриває широкі можливості. Передбачивши методи візуалізації, збереження в базі даних, відновлення в робочому стані (наприклад) можна буде не замислюватися про те, що робити в конкретному випадку. Всі завантажені файли поміщаються в масив послідовно, а коли йде його обробка, викликаються завжди одні і ті ж методи за однією і тією ж схемою, але файл зображення буде відображено як є, файл електронної таблиці як таблиця, а документ - як відповідний текст. Доступний за допомогою синтаксису PHP останній елемент, масив оснащує своїми властивостями і конкретним змістом. В останньому випадку документ завжди має символи, рядки, числа і, що найважливіше, форматування. Встежити за кожним елементом складно, але, передбачивши для кожного елемента формату належний об'єкт, можна отримати, не замислюючись, документ як є.

Стек і рекурсія в межах синтаксису

Коли йде робота тільки з останнім елементом, основна умова - це стек, але, коли цей елемент виконується і в ньому використовується та ж конструкція, а особливо він сам, - це рекурсія. Можна сказати багато хорошого про бібліотеки PHPOffice, наприклад PHPWord, але стверджувати, що вони реалізують повноцінний механізм, що транслює вихідне форматування документа в результат, не можна. Дійсно, використовуючи PHPOfficePHPWord можна елементарно відкрити будь вордівському документ (*.docx), але це всього лише архів безлічі структурованих файлів xml, малюнків, об'єктів та ін При цьому, якщо взяти тільки xml-файли, хоча вони взаємопов'язані (в частині стилів, таблиць, малюнків), не вдасться сформувати новий документ на основі старого і просто перенести в нього бажані зміни (наприклад, змінити шрифт, кольори, форматування). Варіантів застосування тегів Open XML безліч, і навіть настільки налагоджений продукт, як MS Word, не завжди справляється з ідеями користувача, допускаючи помилки.
PHP: останній елемент. Масив в динаміці
Власне *.docx файл - це zip-архів, причому чіткої і зрозумілої структури. Використовуючи невелику кількість об'єктів, які можна формально описати його і отримати в момент читання повноцінну, самостійну структуру даних, якої можна буде управляти семантично. В даному випадку інформація в документі - формальна структура даних. Надавши їй динаміку, можна легко перейти на рівень сенсу і абстрагуватися від синтаксису.