Як я можу передавати дані об'єктно-орієнтованим способом у PHP?


11

Я вважаю, що навіть працюючи з рамкою MVC (наприклад, CodeIgniter), я регулярно вдаюся до передачі вкладених масивів, а не до об'єктів.

Це не відповідає моєму розумінню об'єктно-орієнтованого. Наприклад, якби я переніс код на Java, я б не мріяв пропускати масиви (або Vectors, чи що завгодно) навколо подібного.

Мені було цікаво, чи це правильний спосіб обробки даних. Чи є причина, чому масиви передаються навколо PHP, як це, або чому об'єкти не використовуються? Який найкращий спосіб передавати дані навколо?

Відповіді:


8

Не плутайте ОО Java з PHP. Java є єдиною мовою парадигми, що означає, що вона робить лише OO. З іншого боку, PHP - це багатомовна парадигма, ви можете робити функціональне програмування, або OO, або і те й інше.

Зараз немає такого поняття, як "погана" реалізація ОО. OO Java не є остаточною реалізацією, якої повинна або повинна дотримуватися будь-яка інша мова. Існують деякі остаточні концепції, і обидві мови повністю реалізують їх по-своєму (Java з початку, PHP з версії 5).

Отже, відповісти на ваше запитання: що робить CI і що ви робите з цим, це правильно у світі PHP. Масиви PHP - це одна з найбільш гнучких і корисних структур, і насправді добре використовувати масиви над об'єктами, коли ваші дані є лише інформацією (не несучи з собою логіки). Повністю OO-код - це не те саме, що "тільки код OO".

Якщо ви починаєте з PHP, використовуйте Java як орієнтир для передового досвіду OO, але не обмежуйте своє розуміння PHP через те, що "Java робить це інакше". Ви дійсно можете заграти в обох, парадигма не врятує вас, якщо ви не отримаєте понять.

Якщо в будь-якому випадку вам здається, що Java більше подобається (як особисте уподобання), перегляньте Ruby для веб-розробки, вони трохи тісніше пов'язані.


Чому ми не повинні плутати Java OO з PHP OO? Вони майже однакові, за винятком того, що PHP має власний тип даних масиву / хеш.
Мартін Вікман

Реалізації досить схожі. Я мав на увазі те, як вони використовуються в обох мовах.
янніс

У мене є проблема в ООП. Я хочу створити дизайн OOP для програми (база PHP), де один об'єкт буде залежати від інших об'єктів. Як мені впоратися з цим в PHP? PLZ допоможіть мені ...
Імран Хан

Приклад Сценарій: Об'єкт готелю має об'єкт Кімнати, де об’єкт кімнати має об'єкти Дати ... а об’єкт Дати мають ціни на типи людей. Тепер, як поводитися з таким типом сценарію в PHP на базі OOP (оскільки є великі дані, які потребують обробки на кожному рівні).
Імран Хан

@Walter я чекаю вашої відповіді .... PLZ допоможіть мені.
Імран Хан

2

Використовує об'єкти замість масивів лише тому, що це об'єкти - це не парадигма ОО, це лише особисті переваги :)

Об'єкти надають зручне заповнення коду в IDE, можуть використовуватися інтерфейси (підказки типу) та успадкування.

Якщо ви хочете використовувати об'єкти замість масиву, оскільки бачите будь-які переваги - використовуйте їх, але якщо ви хочете використовувати їх лише тому, що це об’єкти - не витрачайте час на це рефакторинг :)


" об'єкти використання так само, як масиви займуть більше пам'яті та процесора. " Це не завжди відповідає дійсності. Об'єкт, що містить однаковий обсяг даних з масивом, займе майже такий же об'єм пам'яті.
янніс

@Yannis Rizos, так, об’єкти навіть можуть використовувати менше пам'яті, відредаговані.
OZ_

Це не лише те, що вони можуть використовувати менше пам’яті, це те, що їх пам'ять не має значення, оскільки це тривіально порівняно з іншими аспектами продуктивності пам’яті системи та перевагами використання об’єктів. Якби ми так піклувалися про використання пам’яті, ми ніколи не використовували б об’єкти. Нас хвилює те, що об’єкти дають нам кращі інструменти для міркування та побудови систем.
Рейн Генріхс

@Rein Henrichs, я це знаю, дякую. Тому всі слова про «пам’ять» були видалені з моєї відповіді. Я не намагаюся робити дурну оптимізацію, але впевнений, що objects just because they are objectsце не привід для рефакторингу :) Прочитайте мою відповідь, а не лише коментарі.
OZ_

досить чесно, я коментував перед правками.
Рейн Генріхс

1

Ви дійсно не передаєте дані навколо системи OO - ви передаєте об'єкти навколо. Різниця полягає в тому, що об'єкти містять поведінку, а також дані. Ось чому вони називають його об'єктно-орієнтованим, а не орієнтованим на дані.

Поки вам не потрібна поведінка з вашими даними, тоді звичайні старі масиви php настільки ж хороші (або погані, залежно від вашої точки зору), як і об'єкти цінності.


0

Я думаю, що це лише питання коригування - в програмуванні існує багато реалізацій "об'єктів" - Python та Javascript мають разюче різні властивості. PHP OO, мабуть, хак - PHP масиви не є "об'єктами" в традиційному розумінні - але вони служать очевидній меті. Якщо ви не хочете, щоб дані мали власну поведінку, тоді навіщо використовувати об'єкт?

Редагувати:

re: об'єкти незмінної цінності

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/


Для надання даних надійної структури. Так, я можу створити функцію, яка виводить певний формат / вкладення масиву, але хто повинен сказати, що я не пишу іншу функцію, яка трохи змінює її, а потім передає її далі.
Метью

1
впевнений - тоді вам знадобиться об'єкт для захисту змінного доступу - оскільки немає PHP-еквівалентів кортежів Python, наприклад. Але там - ви визначили проблему, ви просто повинні використовувати конструкції, доступні для мови ... або просто навчитися жити за допомогою "химерностей". Я додав посилання на свій початковий пост, який цікаво обговорив проблему.
sunwukung
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.