Свойства модели являются динамическими - PullRequest
2 голосов
/ 19 декабря 2011

Я пришел из .net, так что пустые классы (модели), которые я вижу в Lithium, тревожат.
В .net у меня нет свойства, если я не делаю что-то вроде:

public class MyClass()
   public property myProp as string
end class

и затем я устанавливаю или получаю свойство так:

dim aClass as myClass
aClass.myProp = "some string"
dim myString as String = aClass.myProp

То, что я вижу в Lithium, - это динамические объекты в духе JavaScript.
Я могу объявить произвольный объект и добавить свойства на ходу. Я не говорю, что это плохо, я просто хочу знать:

  1. Если это нормально для PHP или нормально для Lithium, и
  2. Если я добавлю свойства (чтобы я мог получить завершение кода в затмении), повредит ли это функциям ORM в Lithium?

1 Ответ

3 голосов
/ 19 декабря 2011

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

В Lithium MyModel::create() или MyModel::find() возвращают объекты сущностей или коллекции объектов сущностей, которые представляют записи базы данных или документы.

Свойства сущности хранятся в защищенных массивах $_updated и $_data и доступны через методы __get и __set.

Итак, когда вы ссылаетесь на $myModel->title, вы получаете / настраиваете $myModel->_updated['title'].

Затем при вызове $myModel->save() данные в $_updated сохраняются в записи базы данных или в документе.

Подробнее см. https://github.com/UnionOfRAD/lithium/blob/master/data/Entity.php.

...