Задать вопрос
Diversia
@Diversia

В чем разница между при вызове классов?

В чем разница между при вызове классов:
1.
$el = new CIBlockElement;
$res = $el->GetList(false, $arFilter, false, false, $arSelect);

2.
$res = CIBlockElement::GetList(false, $arFilter, false, false, $arSelect);


Какой способ вызова наиболее ресурсоемкий и быстрый?
  • Вопрос задан
  • 159 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 2
@sidni
Php Developer
Вызов статических методов происходит быстрее и менее ресурсоемкими поскольку не нужно создавать экземпляр класса и они являются частью самого класса.
Разница между ними является это сам подход в программировании и разная область видимость компонентов самого класса.
Традиционный вызов через экземпляр класса является более приемлемым т. к. этот подход позволяет сохранить все "благородные" подходы (OOP, SOLID и т. д.)
Вызов статических не рекомендуется потому как большинство принципов и подходов нарушаются. чаще всего используется вызов статических методов в хелперах (например классы для удобства работы по обратоке строк, математических функций и т. д.) либо в паттернах аля синглтон (обычно это какието глобальные классы в рамках самого проекта где можно быстро получить какие то конфигурационные данные проекта, доступ к базе данных и т. д.)
Ответ написан
Комментировать
heavenst
@heavenst
Раз уж в тегах "1С-Битрикс", то на всякий случай стоит отметить, что у класса CIBlockElement есть только статический GetList.
А разница между статическими методами и методами экземпляра в том, что метод экземпляра работает в контексте конкретного объекта, имеющего определённое состояние (значения свойств), зачастую изменяя это состояние. Такое совмещение хранения данных и действий над ними в одном объекте - позволяет создавать более ясные и поддерживаемые программные интерфейсы. А статические методы по использованию больше напоминают обычные функции.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Разница в том, что в первом случае создаётся экземпляр класса, а во втором - нет. Очевидно же!
Но думаю что вы спрашиваете немного про другое. Вы не можете просто взять и заменить один вызов другим. Они предназначены для разных целей.
Ответ написан
hack504
@hack504
Какой способ вызова наиболее ресурсоемкий и быстрый?

Никакой. Даже если и есть преимущество, то это экономия на спичках. Вообще ООП призван решать другие проблемы и на быстроту ему плевать.
Ответ написан
Комментировать
kimono
@kimono
Web developer
Разница в объявлении методов и соответственно в их вызове:
1. public function GetList() {}
2. public static function GetList() {}
Ответ написан
Комментировать
dmitriylanets
@dmitriylanets
веб-разработчик
на одной чаше весов производительность на другой поддержка кода
вам выбирать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы