Должен ли я перейти на массивы или объекты в PHP в приложении CouchDB / Ajax? - PullRequest
2 голосов
/ 27 мая 2010

Я все время преобразую массив и объект в PHP-приложении, которое использует couchDB и Ajax. Конечно, я также конвертирую объекты в JSON и обратно (иногда для couchdb, но в основном для Ajax), но это не сильно мешает моему рабочему процессу.

В настоящее время у меня есть объекты php, которые возвращаются модулями CouchDB, которые я использую, и, с другой стороны, у меня есть старый привычка возвращать массивы, такие как массив («error» => «not found», «data» => $ dataObj) из моих функций. Это приводит к смешанному вхождению реальных объектов php и вложенных массивов, и я при необходимости использую (object) или (array). Хуже всего то, что я знаю более или менее наизусть, что возвращает функция, а не какой тип (массив или объект), поэтому я часто сталкиваюсь с ошибками типов.

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

Это правильный путь? Как насчет конверсии? Другие идеи или советы?

Редактировать: Ответ Кенании предполагает, что я должен пойти другим путем, это означало бы, что я буду преобразовывать все в массивы. И для всего Ajax / JSON, а также для CouchDB я бы использовал

$myarray = json_decode($json_data,$assoc = true); //EDIT: changed to true, whcih is what I really meant

Еще больше работы по изменению всех функций CouchDB и Ajax, но в итоге у меня получился лучший код.

Ответы [ 2 ]

1 голос
/ 31 мая 2010

Это зависит от той парадигмы, в которой вы хотите работать. По сути, ваши данные - это все пары ключ-значение, хранящиеся в CouchDB. Возможно, его можно легко сопоставить с объектами / объектами, и вам удобнее думать об этом с точки зрения объектов, которые имеют свойства и методы. Или, может быть, нет, и, возможно, вам удобнее работать с необработанными данными без абстракции, которую предоставляют классы. Я думаю, что это ключевое различие, которое должно принять ваше решение.

В PHP нет больших накладных расходов, связанных с объектами и массивами. Внутренне они обрабатываются аналогично движком PHP. Возможно, вы захотите сравнить его самостоятельно, если это вызывает озабоченность, но я думаю, что вы не найдете большой разницы, если вы не используете большой трафик или у вас очень ограниченный сервер. Очевидно, что ваше веб-приложение было бы быстрее, если бы вы написали его на оптимизированном ассемблере x86, но вы этого не делаете, потому что хотите иметь возможность пользоваться удобством, которое обеспечивает язык высокого уровня, такой как PHP. Так что выполняйте лучший дизайн сейчас и оптимизируйте позже, если это даже необходимо.

1 голос
/ 27 мая 2010

Вообще говоря, вы должны всегда использовать массивы, если нет веской причины использовать объекты. И единственная веская причина использовать объекты над массивами в PHP, если вам нужны какие-то функции для ваших данных, которые массивы не предоставляют (такие как закрытые / защищенные переменные, методы, магия объектов, определенная структура и т. Д.). Если вы имеете дело исключительно с данными, лучше использовать формат массива, потому что вы можете легко манипулировать данными, используя огромный массив PHP функций массива (без каламбура).

UPDATE:

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

Из того, что я могу сказать, вы должны возвращать массивы из CouchDB, чтобы избежать необходимости полного преобразования.

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