0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 2035 Просмотров
*

Klen

  • Новичок
  • 8
  • 1 / 0
В ООП как я понимаю обычно такой порядок действий
1. Создаем экземпляр класса, напр. $copy = new MyClass;
2. Обращаемся к методам и свойствам посредством "$copy->Метод()"

В Joomla же куча записей, например, вида:
JObject::getProperties(false)

Как я понимаю, обращение через "::" это вызов функции вне контекста объекта. Т.е. вызов как бы обычной функции.

Это что, своеобразный возврат к процедурному программированию?
Или я что-то не понимаю?
Просветите, плиз!!!
« Последнее редактирование: 17.06.2008, 16:53:57 от Klen »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Ну почему к процедурному? Ничего плохого в статических методах класса как бы нет. Ведь довольно часто нет смысла создавать экземпляр объекта, когда нужно выполнить код, действительно к контексту объекта отношения не имеюшего. Т.е. довольно часто, классы используют именно для группировки набора функций и избежания конфликта имен (ведь понятно, что в масштабах большого проекта функция getProperties может встретиться не раз).

Вот к примеру они взяли и сгруппировали свои реализации строковых функций в классе JString, и понятно, что для того, чтобы вызвать strpos, весьма не рационально тратить время и память на создание экземпляра и вызова его метода. Бо с самим объектом фунция никак не связана. Да и использовать в этом случае Singleton тоже не очен уместно - на большом количестве таких объектов будет перерасход памяти. А так, и компактно, и понятно, и нет никаких конфликтов.

С другой стороны, много статических вызовов у методов, реализующих различные паттерны, типа Singleton, Fabric и им подобным.
*

Klen

  • Новичок
  • 8
  • 1 / 0
Спасибо за подробный, понятный и быстрый ответ.  :D
Как раз 20е сообщение и +
« Последнее редактирование: 19.06.2008, 16:49:53 от Klen »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться