Запутались в объектах и ​​классах в CodeIgniter? - PullRequest
3 голосов
/ 12 сентября 2010

Я новичок в CodeIgniter и у меня есть вопрос. Я немного озадачен классами, библиотеками и объектами.

Заменяет ли CodeIgniter обычный PHP-способ использования объектов, т. Е. $var = new car();, на библиотеки, т. Е. $this->load->library('some_library'); $this->some_library->some_function();?

Если оба действительны, есть ли разница? Если да, то в чем различия и когда я использую одно над другим? Что является более распространенным / правильным?

Я спрашиваю, потому что я создал класс, но я не уверен, как правильно его создать.

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 12 сентября 2010

Я не знаком с CodeIgnitier.Но знаком с другими PHP-фреймворками.Большинство фреймворков используют этот способ для повышения производительности, регистрации вещей, выполнения определенных событий и упрощения разработки для разработчика ...

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

Фреймворк также работает как фабрика.Вместо того, чтобы воссоздавать объект, он будет создавать объект только один раз, и каждый раз, когда вы будете вызывать метод снова, он будет возвращать ссылку на существующий объект.Вещи становятся зарегистрированными, и т.д ...

3 голосов
/ 12 июля 2013

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

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

Что делает класс загрузчика ($this->load), помимо прочего, так это то, что он создает отдельный объект указанного класса (модель, библиотека или представление - хотя и не помощники, см. Ниже) и присоединяет его как свойство объекта базовый класс, который обычно доступен через $ this.

Помощники немного разные. Они не прикреплены, а просто «читаются» в глобальном пространстве имен с того места, где они загружены.

Чтобы ответить на ваш вопрос, было бы правильнее использовать класс загрузчика в тех случаях, когда вам не нужно создавать более одного экземпляра класса. Если вам нужны классы «сущностей», ваша лучшая ставка в соответствии с CI - создать их в качестве помощников.

0 голосов
/ 01 ноября 2013

Учитывая только этот контекст, это похоже на инверсию управления (возможно, я ошибаюсь, я не слишком внимательно посмотрел на CodeIgniter).

Вы не хотите полагаться на тип car как в new car().Что если позже вы захотите сделать $var a racecar?$var все еще может делать то же самое, но оно должно быть car, потому что вы создали его напрямую.Или что, если вы тестируете этот класс, но car - это сложный объект, который вызывает какую-то внешнюю службу.Вы хотите проверить свою логику, но не волнует, не работает ли автосервис.Таким образом, вы должны иметь возможность изменить $var для фактической загрузки mockcar.Вы не можете сделать это, если вы делаете $var = new car().

Что такое инверсия контроля?

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