Как стать автором
Обновить

Комментарии 48

НЛО прилетело и опубликовало эту надпись здесь
про читабельность какого кода?
В данной статье я рассматривал не читабельность и ООП, а производительность
простите, я конечно могу ошибаться, но мне всегда казалось что static функции не для скорости в первую очередь нужны (не знаю как в РНР но в других языках так).
В теории не для скорости, но на практике это отражается именно на ней, помимо основного назначения.
Читаем еще раз первый абзац.
Про модификатор static читаем тут.
Понимать стоит так, если функция может быть объявлена с модификатором static, ее лучше с ним объявить
мне кажется ещё до написания ф-ии человек должен знать, static она будет или нет. И уже тем более он обязан отметить её как static
Вы абсолютно правы!
Однако как я писал ниже, есть огромное кол-во кода написанное раньше
что за бред?
если функция доступна по Math::fib(), то она уже статическая!
а делать функции без указания их видимости ( private/public/protected ) и их пренадлежности к классу( static ) или объекту вообще недопустимо с момента выхода PHP5
"если функция доступна по Math::fib(), то она уже статическая!"
как видно исходя из тестов php об этом не знает
Что значит "недопустимо"?
НЛО прилетело и опубликовало эту надпись здесь
Долго думал, что тебе написать...
по поводу пункта 1 вы правы - Calling non-static methods statically generates an E_STRICT level warning
по поводу пункта 2 Мы, наверное, пишем код самостоятельно и никогда не занимаемся поддержкой чужого (не всегда хорошо документированного) кода. Мы, наверное, никогда не занимались оптимизацией чужого кода, особенно написанного для php 4
по поводу пункта 3. Я пишу в vim, и не пользуюсь окнами диалога для создания функции.

По поводу последнего, сделайте голосование по поводу использования static в объявлениях функций, заодно и проверите многие ли его пользуют
И потом в статье рассматривалось то, что написано во втором абзаце
НЛО прилетело и опубликовало эту надпись здесь
А я недоверчивый...
На заборе тоже много чего пишут, бабушка подошла, а там сучок.
Вот когда в 5 статье, которую я читаю по оптимизации, пишут про модификатор static, невольно задумываешься о том, что надо бы проверить
Ужас. Вам бы не ерундой заниматься, а умных книжек почитать.
Никто так фибоначчи не вычисляет
кеширование предыдущих значений не предпринималось для имитации сложных вычислений, подробнее о методах вычисления чисел фибоначчи на странице Википедии, которую я указал
А почему никто не пишет, что вызов статического метода хорош тем, что для него не нужно создавать экземпляр объекта, а это значит, что мы не тратим время и память на вызов конструктора объекта??? Автор, какое время ты учитывал: только вызов одного метода или выполнение скрипта в целом?
Уважаемый читатель!
Как вы можете видеть из предложенных примеров, засекается время вызова метода.
Далее, для вычисления более точного среднего значения проведены итерации.
Вот, а я о чем! Так что вы должны еще прибавить ко времени вызова нестатического метода время на создание объекта, поскольку эти операции неотделимы друг от друга. Это время ничего не значит при многократном итерировании метода, но довольно ощутимо если метод вызывается единоразово.
Вы неправы.


Где здесь создается экземпляр объекта? То, что метод будет выполняться быстрее, если к нему приписать static обусловлено внутренним устройством Zend Engine.
Млин.... Еще один эксперементатор...
Зачем юзать класс как неймспейс? Это раз.
Я так понимаю Вы из тех кто принт на эхо везде заменяет? Это два.
Если у вас возникают мысли значит нет понимания концепции ООП и в частности на PHP это три.
1) Вы знаете как реализовать неймспейсы по другому на php
2) Мне параллельно print или echo
3) Концепция ООП - это наследование, полиморфизм и инкапсуляция
namespace my::namespace

use my::namespace as myns;
myns::...
В 5.2 это не работает.
С каких пор пространства опять разделяются двумя двоеточиями?
тьфу-ты блин. Перешел с прямого эфира сюда, не посмотрел, что пост пятилетней давности %)
1. Простите, может я чего-то не понимаю, но откуда PHP 5.2.5 неймспейсы
2. Это обнадеживает.
3. Концепция ООП это далеко не наследование, полиморфизм и инкапсуляция. Концепт абсолютно в другом.
вот я и пишу вам, что если их нет, их реализуют в виде классовой обёртки
Концепция ООП это далеко не наследование, полиморфизм и инкапсуляция. Концепт абсолютно в другом.


Полиморфизм, инкапсуляция и наследование это основа ООП!
Согласен. Это три основопологающих принципа. Концепция в ООП в самом объекте а не в этих трех принципах. Без самого объекта всё лишено смысла.
Зачем говорить, когда лучше молчать?
Не в обиду будет сказано, но чем отличаются методы класса от методов объекта Вы не знаете, и где их применяют - тоже.
никогда не мог понять смысл объявлять метод, которому для работы нафиг не нужны свойства экземпляра, НЕ статичным. ни в одном языке. если метод не зависит от состояния экземпляра, то тогда зачем экземпляру собственный метод?! пусть пользует один — статичный.

кстати, Idea и Resharper показывают возле методов потенциально способных быть статиками, но не объявленными как таковые ворнинг. имхо, очень правильный ворнинг.
Да. Абсолютно согласен. Если методу не нужен свойства экземпляра, даже не так... Всем методам не нужны свойства экземпляра - зачем спрашивается такой класс? Дублирование объекта Math JS?
Да. Абсолютно согласен. Если методу не нужен свойства экземпляра, даже не так... Всем методам не нужны свойства экземпляра - зачем спрашивается такой класс? Дублирование Math JS?
посмотрите реализацию..ну скажем pear/db
где такой метод используется в качестве фабрики классов
спасибо, будет время посмотрю.
но все равно пока у меня лично есть правило - «можешь объявить статиком — объявляй». и родилось оно не из-за производительности, а из соображений банального удобства и читаемости. конечно, иногда возникают ситуации кода от этого правила приходится отступать, но это исключения ;)
Я нигде не заявлял, о том, что static не надо использовать!!! Я извиняюсь перед вами, не до конца дочитал ваше предложение про "не статическими", абсолютно с вами согласен про то, что методы, которые не используют данных класса нужно объявлять статическими.
В статье написано о различной производительности функций объявленный с модификатором и без и только. Я не обсуждаю ни концепции ООП, ни наследование, которое мне тут приплели любители поспорить над выдуманными вопросами
Дело не в производительности, а в высоких идеях ООП, имхо :)
Разумеется static быстрее! Одно только отсутствие необходимости создания экземпляра класса (то бишь выделение под него ресурсов машины) для доступа к методам, говорит о скорости работы оных. Если не нужно запоминать промежуточные состояния объекта - необходимо использовать static.
Единственный минус топика в том, что автор не предоставил ответ на вполне логичный вопрос "почему static быстрее не-static модификаторов?".
Господи. У меня сейчас истерика начнется.

class A {
public function foo() {
echo __CLASS__;
}
}
A::foo();

Ну объясните мне, ГДЕ здесь создается экземпляр класса? Метод замечу НЕ объявлен статическим. И это корректное использование метода класса в PHP. А именно про это различие и идет речь в статье.
Это E_STRICT в PHP5. Точка. А на генерацию ошибки тоже время уходит.
Я знаю PHP достаточно хорошо и про E_STRICT в том числе. Генерация ошибки не приведет к замедлению в два раза. Я спрашивал про то, в каком месте создается экземпляр класса A.
Использование статических методов в классе без определения его явно приводит к дополнительной проверке интерпретатора и, соответственно, дополнительным накладным расходам и, притом, не маленьким )))
То что пишите static для статических функций их не зря делали )))
Вот из-за тех кто не пишет static!!! Я сейчас мучаюсь и дописываю. Так как php 5.4 очень не любит лентяев которые не следуют правилам.
А вот из-за тех, кто поднимает посты пятилетней давности я весь пост прочёл и половину комментов.
Я тоже не посмотрел на дату, перешел с яндекса.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории