Читал когда-то по оптимизации работы классов, что если метод можно сделать статическим, то рекомендуется так делать.
Недавно наткнулся на то, что вызов статического метода из класса при помощи "::" работает намного медленнее "объект->".
Вопрос? Есть ли у кого-нибудь данные по этому поводу? Нужно ли использовать статические методы вообще? Или они правда работают медленнее? А что насчет конструкции "self::" в сравнении с "$this->"?
Красота красотой, но быстродействие мне кажется важнее.
1. ole-martyno - 03 Апреля, 2012 - 22:20:57 - перейти к сообщению
2. Bio man - 03 Апреля, 2012 - 22:39:03 - перейти к сообщению
Не с правильной стороны подходишь к вопросу. Объекты в РНР как правило медленнее процедур и памяти жрут больше. Но это не значит, что стоит от них отказываться. ОО подход делает систему более гибкой и расширяемой, и разрабатываються такие системы гораздо быстрее чем в процедурном стиле.
По теме
По теме
ole-martyno пишет:
Точно скажу, что речь шла не о быстродействии а о памяти. Если создавать объект, для того что бы обратиться к методу который может быть статическим, то при каждом создании объекта будет выделяться память.если метод можно сделать статическим, то рекомендуется так делать.
ole-martyno пишет:
Нужно, но с умом, то есть не лепить их где попало. Когда подайдете к более серьезным вещам, тогда поймете прелесть статических методов и свойств.Нужно ли использовать статические методы вообще?
ole-martyno пишет:
self конструкция для обращения к методам, свойствам и константам, не важно к статическим или нет, в контексте класса. $this это грубо говоря указатель на самого себя, для доступа к динамичным методам и свойствам.
А что насчет конструкции "self::" в сравнении с "$this->"?
3. ole-martyno - 03 Апреля, 2012 - 23:07:23 - перейти к сообщению
Не очень понятно, то есть и self и $this-> можно использовать в контексте класса применимо к динамическим методам? В чем разница?
4. caballero - 03 Апреля, 2012 - 23:31:02 - перейти к сообщению
Цитата:
Красота красотой, но быстродействие мне кажется важнее.
там где важно вычислительное быстродействие PHP не используют
Цитата:
Не очень понятно, то есть и self и $this-> можно использовать в контексте класса применимо к динамическим методам? В чем разница?
первый к статичкеским методам второй к любым
5. DlTA - 03 Апреля, 2012 - 23:49:53 - перейти к сообщению
caballero пишет:
первый к статичкеским методам второй к любым
работает
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class test{
- public function a(){ return 1;}
- public function main(){ return self::a();}
- }
- echo test::main();
ошибка "Fatal error: Using $this when not in object context "
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class test{
- public function a(){ return 1; }
- public function main(){ return $this->a(); }
- }
- echo test::main();
работает:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class test{
- static function a(){ return 1; }
- public function main(){ return $this->a(); }
- }
- $cTest = new test();
- echo $cTest->main();