|
|
|
| Добрый день.
Сейчас появилась небольшая проблема, а точнее я запутался. В общем, как обычно мастерю очередной велосипед - фреймворк.
Проблема уперлась в static ф-ции и работу без создания объекта.
Есть главный класс, который работает на паттерне - синглетоне, содержит в себе массив с настройками и прочие методы, есть класс роутов. У него есть их массив, где указываются правила.
Вопрос.
Можно ли сделать этот массив с роутами - статическим? Для того, чтобы можно было к примеру добавлять правила как-то так:
Route::map(
'blog/peoples' => 'blog/users'
);
И вообще, я бы в большинстве случаев (эти случаи обычно файлы на тематику разных настроек) использовал бы статику, так как очень удобный доступ и не требует создания объектов.
Объясните пожалуйста в чем минус этой статики? И вообще чуть подробней на эту тему расскажите + стоит ли промышлять такие махинации или обычно создавать объекты.
Ps
Это не совсем по теме, но напишу: просто смотрел в ci, реализация как-то вообще иногда сделана странно. У них каждый конфиг обрабатывается, инклудеца тучей кода, который иногда кажется бессмысленным. | |
|
|
|
|
|
|
|
для: Belkin
(02.10.2012 в 03:37)
| | Вы можете любую переменную сделать статической... не очень понятно, что вас смущает? Статика - это работа объектно-ориентированными средствами без дублирования памяти в объекте. Т.е. каждый статический экземпляр один и тот же для всех объектов. Статические методы обслуживают статические элементы класса, а зачастую используются без обращения к статическим элементам, просто как набор утилит в классе-контейнере.
>И вообще, я бы в большинстве случаев (эти случаи обычно файлы на тематику разных настроек)
>использовал бы статику, так как очень удобный доступ и не требует создания объектов.
Вполне себе подход. | |
|
|
|
|
|
|
|
для: cheops
(03.10.2012 в 09:15)
| | Я возможно сейчас скажу глупость на счет static, но я думал, что этот тип означает, что данный метод (или перем.) не делает что ли никаких "динам. действий" и возвращает неизменное значение, то есть статичесое (понимаю, что бред написал, но как-то так), а о том, что это "работа объектно-ориентированными средствами без дублирования памяти в объекте" даже не знал и не представлял. Спасибо. | |
|
|
|
|
|
|
|
для: Belkin
(03.10.2012 в 23:52)
| | На самом деле - это работа без объекта, одним классом... просто в PHP "динамически выделяемая память при помощи new" несколько теряет смысл, так как вся память выделяется динамически и внутри движка, программист с этим дело не имеет. Однако, понятие динамический и статический осталось. Как впрочем и необходимость помнить, что каждый раз вызывая new, вы выделяете новый кусок памяти под объект - этот кусок памяти будет хранить данные, отличные от другого объекта. Изменение в одном объекте не отражается на данных другого объекта. А вот в случае статических переменных - все по другому, они общие для всех объектов, изменение в одном объекте, приводит к изменению значения во всех объектах. Статические методы изначально предназначены для обслуживания статических членов класса, но их очень удобно использовать для методов, которые не используют $this->, т.е. не обращаются к внутренним переменным объекта. Как правило, статическими методами оформляют различные манипуляции над деревьями и контейнерами объектов, разнообразные методы-утилиты. Как только вам нужно обратиться к члену или методу класса через $this-> метод перестает быть статическим - он задействует элементы конкретного текущего объекта. | |
|
|
|
|
|
|
|
для: cheops
(04.10.2012 в 15:28)
| | Спасибо за информацию. | |
|
|
|