Почему передача данных в массивах не рекомендуется в CodeIgniter? - PullRequest
2 голосов
/ 22 апреля 2011

Я пришел из Java-фона и только недавно начал изучать PHP и CodeIgniter.

Хотя я нахожу среду потрясающей благодаря ее чистому дизайну и впечатляющей документации, я заметил, что среда не обязательно препятствуетиспользование массивов данных вместо объектов-значений для передачи данных.Например, запросы к базе данных возвращают результат в массиве, который затем можно передать представлениям для рендеринга.Точно так же большинство методов базовой библиотеки принимают в качестве входных данных ассоциативные массивы.

Мне кажется, что это плохой дизайн для объектно-ориентированного языка, который должен поощрять и, возможно, даже принудительно использовать объекты-значения для их очевидных преимуществ инкапсуляции.

Это действительно примерплохой дизайн или просто вопрос стиля / предпочтений?Есть ли очевидные преимущества использования массивов для данных по сравнению с более ОО-подходом?

Ответы [ 5 ]

8 голосов
/ 22 апреля 2011

Не заблуждайтесь мифом о том, что «все должно быть объектом», чтобы ваш код был «хорошим объектно-ориентированным дизайном». Когда вы начинаете пытаться сформулировать рационализации, что «мне нельзя позволять это делать, потому что это не очень хороший ООП», вы программируете в обратном направлении.

Когда вам нужен список фрагментов данных, достаточно массива данных. Действительно, это уместно .

2 голосов
/ 22 апреля 2011

PHP не является объектно-ориентированным языком.Это гибридный язык.

Массивы используются везде, потому что они значительно мощнее, чем в других языках (в частности, в Java).И за кулисами и массивы, и объекты используют одну и ту же словарную реализацию в PHP.

Если вы хотите объективировать массивы, оберните их в:

 $array = new ArrayObject($array, ArrayObject::ARRAY_AS_PROPS);

Или вы можете просто ввести массив1: 1 в объект значения:

 $obj = (object) $array;

И обратно:

 $array = (array) $obj;

В любом случае, они работают одинаково во многих контекстах (foreach работать над ними легко).

2 голосов
/ 22 апреля 2011

Массив - это объект, который идеально подходит для передачи данных.Нет необходимости определять свой собственный класс, когда встроенный будет делать.

2 голосов
/ 22 апреля 2011

Зачем строить сложную структуру объектов, когда хеш будет делать?ИМХО, многие вещи в мире Java чрезмерно спроектированы.Это мнение, похоже, разделяется многими динамическими языками и наборами инструментов, такими как Ruby on Rails.

1 голос
/ 20 июля 2011

Что ж, очевидная причина использования объектов-значений вместо ассоциативных массивов заключается в том, что если вы передаете данные в массив по всему месту, а затем вам нужно изменить имя столбца таблицы БД, вам придетсяобновите способ доступа к нему везде в своем коде, тогда как если у вас есть объект значения, вам нужно обновить только одну строку (внутри конструктора VO)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...