ФорумПрограммированиеPHP для идиотов → Статические классы

Статические классы

  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 19 сентября 2009 г. 12:40, спустя 2 часа 12 секунд

    автолоадер на лету создает пустой class SomeClass extends SomeClass_Core {}

    в 3.0 уже не так вроде
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 19 сентября 2009 г. 14:51, спустя 2 часа 11 минут 10 секунд

    может быть. я смотрел Kohana 2.3.4 которая сейчас предлагается как "latest version"
    ιιlllιlllι унц-унц
  • OFF

    Сообщения: 429 Репутация: N Группа: Адекваты

    Spritz 19 сентября 2009 г. 18:13, спустя 3 часа 21 минуту 37 секунд

    0.2585(100%) 0.2839(110%) 0.2846(110%)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 19 сентября 2009 г. 23:29, спустя 5 часов 16 минут 2 секунды

    OFF, а версия PHP и наличие оптимизаторов?
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 30 сентября 2009 г. 0:42, спустя 10 дней 1 час 13 минут

    Почитал авторитета: Ilia Alshanetsky документ PHP & Performance
    До меня доше смысл "always declare static". Всё сука просто: если метод по сути статический, не забывайте писать слово static. Это не значит, что статические методы быстрее! Это значит что если вы про*бёте слово static а обращение будет через "::", то возникнут большие потери времени.

    Вот пример Ilia (мои дополнения — всё что за "–"):

    <?php
    class bench {
       public function a() { return 1; }
       public static function b() { return 1; }
    // —
    public function c() {
    $s = microtime(1);
    for ($i = 0; $i < 100000; $i++) $this->a();
    return microtime(1) - $s;
    }
    public static function d() {
    $s = microtime(1);
    for ($i = 0; $i < 100000; $i++) self::b();
    return microtime(1) - $s;
    }
    }

    header('Content-type: text/plain');
    $s = microtime(1);
    for ($i = 0; $i < 100000; $i++) bench::a();
    $e = microtime(1);
    echo "Dynamic Static Method:\t".($e - $s)."\n";
    $s = microtime(1);
    for ($i = 0; $i < 100000; $i++) bench::b();
    $e = microtime(1);
    echo "Declared Static Method:\t".($e - $s)."\n";

    // —
    $o = new bench;
    $s = microtime(1);
    for ($i = 0; $i < 100000; $i++) $o->b();
    $e = microtime(1);
    echo "True Dynamic Call:\t".($e - $s)."\n";
    // – This is not allowed in PHP 5.2:
    // $s = microtime(1);
    // for ($i = 0; $i < 100000; $i++) $o::a();
    // $e = microtime(1);
    // echo "Strange Static Call:\t".($e - $s)."\n";
    echo "Intern Dynamic Method:\t".$o->c()."\n";
    echo "Intern Static Method:\t".bench::d()."\n";

    и результаты

    Dynamic Static Method: 0.317136049271
    Declared Static Method: 0.133683204651
    True Dynamic Call: 0.107385873795
    Intern Dynamic Method: 0.103450059891
    Intern Static Method: 0.0944528579712


    Кроме того Ilia призывает пользоваться константами класса как семантически правильными и не добавляющими никаких задержек.
    А главная мораль оптимизации в другом документе Common Optimization Mistakes:

    "Solve the business case, before optimizing the solution"

    "One of the most common mistakes done even by experienced developers is starting to optimize code without identifying the problem"
    ιιlllιlllι унц-унц
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 30 сентября 2009 г. 4:32, спустя 3 часа 50 минут 8 секунд

    если метод по сути статический, не забывайте писать слово static

    без обид, но твой "авторитет" скорее всего прочитал это тут http://www.php.net/manual/en/language.oop5.static.php

    никакого открытия тут нету.

    и вообще, если метод статический и возле него не написан static, то это по крайней мере не культурно.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 30 сентября 2009 г. 4:34, спустя 1 минуту 24 секунды

    ))) скорее всего он ЭТО написал
    ιιlllιlllι унц-унц
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 30 сентября 2009 г. 4:37, спустя 3 минуты 6 секунд

    я как сайт увидел подумал – дорвей
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 30 сентября 2009 г. 4:41, спустя 3 минуты 33 секунды

    Ilia ведущий разработчик PHP
    Спустя 80 сек.
    возможно они для дорвеев и делают этот неказистый язык ;)
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!