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

Статические методы и свойства

  • vasa_c

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

    Spritz 2 марта 2008 г. 15:10, спустя 11 минут 34 секунды

    А чего ему соответствовать? Можно в папке: session/db.php, session/file.php

    Просто нужно самому решать, где тебе нужен геморрой, а где нет.
    У меня все сеансы в одном месте. Если вдруг я решу, что лучше на файлах, то они будут у меня все на файлах.
    Зачем мне с помощью абстракций решать абстрактные проблемы, которых в данном конкретном случае не будет?
  • ghost

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

    Spritz 2 марта 2008 г. 15:42, спустя 32 минуты 8 секунд

    у меня с базами чуть подругому было, кстати.
    был двиг на postgress, надо было переписать на mysql, благо особо сложных запросов небыло, можно было поддержку обоих встроить.
    ну и соответственно был файлег
    db.php - который подключал стат класс DB
    <?php
    $config = SYS::config('db');
    require_once('db_'.$config['server'].'.php');
    //print 'db_'.$config['server'].'.php'; exit;
    ?>

    ну и соответственно ещ 2 файла с объявлением класса DB
    db_mysql.php
    db_pg.php

    а при особой надобности и версии субд учитывать можно.
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 2 марта 2008 г. 16:18, спустя 35 минут 38 секунд

    т.е.
    session/db.php -> class cSession
    session/file.php -> class cSession
    Так?
    с БД так же?
  • ghost

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

    Spritz 2 марта 2008 г. 18:07, спустя 1 час 48 минут 56 секунд

    c бд не так, выше написано же.
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 2 марта 2008 г. 23:13, спустя 5 часов 6 минут


    c бд не так, выше написано же.

    чёт туплю. как будут называться классы в файлах db_mysql.php и db_pg.php?

    Вот еще простой пример, уже из практики:

    class AR
    {
    static public function Find()
    {
    echo __CLASS__;
    }
    }
    class Foo extend AR {}
    Foo::Find();

  • ghost

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

    Spritz 3 марта 2008 г. 0:06, спустя 53 минуты 40 секунд

    класс будет называться DB
    и там, и там, только в зависимости от сеттингов будет инклюдится конкретный файл
  • Trej Gun

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

    Spritz 17 марта 2008 г. 23:42, спустя 14 дней 23 часа 35 минут

    Я надеюсь это будет не некропост

    ИМХО для чего статический класс в php вобще не могу понять. Это например для java надо создавать класс с константами и потом сравнивать с ними переменные, и не потому что надо, а потому что объект там это единица кода. А в php статик нужен например для паттерна синглтон.


    class Singelton
    {
    private static $instance;

    private function __construct()
    {
    }

    static function & instance()
    {
    if (!isset(self::$instance))
    {
    $c = __CLASS__;
    self::$instance = new $c;
    }
    return self::$instance;
    }
    }

    $S = Singelton::instance();


    а в php набор статических методов лучше делать ввиде набора отдельных функций в отдельном файле и инклудить по мере необходимости потому что объекты сильно тормозят.

    и там, только в зависимости от сеттингов будет инклюдится конкретный файл

    а не считаете ли вы плохим тоном инклудить файлы внутри методов учитывая что и выполняться они будут в области видимости данных методов.
  • ghost

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

    Spritz 17 марта 2008 г. 23:49, спустя 7 минут 37 секунд

    а в php набор статических методов лучше делать ввиде набора отдельных функций в отдельном файле и инклудить по мере необходимости потому что объекты сильно тормозят.

    класс и объект - немного разные вещи, отличие стат класса от синглтона как раз в том и заключается, что синглтон создаёт объект, а стат клас - нет

    а не считаете ли вы плохим тоном инклудить файлы внутри методов учитывая что и выполняться они будут в области видимости данных методов.

    и кстати инклюдится он не внутри метода :)
  • Trej Gun

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

    Spritz 18 марта 2008 г. 10:47, спустя 10 часов 57 минут 50 секунд

    Ок, я вобще на пхп не пишу поэтому у меня на работе даже апача нет, но я приду домой и запущу код



    class Statik {
    public static sqr($i){
    return $i*$i;
    }
    }

    function sqr($i){
    return $i*$i;
    }

    for($c=0;$c<10;$c++){

    $start1 = microtime();
    for($i=0;$i<1000;$i++)
    Statik::sqr($i);
    $stop1 = microtime();

    $start2 = microtime();
    for($i=0;$i<1000;$i++)
    sqr($i);
    $stop2 = microtime();

    $time1 = array_sum(explode(" ",$stop1)) - array_sum(explode(" ",$start1));
    $time2 = array_sum(explode(" ",$stop2)) - array_sum(explode(" ",$start2));

    echo $time1." ".$time2;

    }


    думаю что вариант с статиком будет примерно на 20% дольше


    ЗЫ если кому не лень проверьте и выложите
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz 18 марта 2008 г. 10:58, спустя 10 минут 59 секунд

    мне не лень..
    только я к 1000 добавил еще по нолику, для $c вместо 10 сделал 5
    и после static вписал function :)
    итак, результат

    0.0242729187012 0.0206789970398 = 0.852
    0.0238270759583 0.0205080509186 = 0.861
    0.0237760543823 0.0204939842224 = 0.862
    0.024307012558 0.0204939842224 = 0.843
    0.0243158340454 0.0204889774323 = 0.843


    15 процентов.. при 10 000 циклов
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz 18 марта 2008 г. 11:08, спустя 9 минут 59 секунд

    вдогонку:
    статическое обращение к нестатическому методу медленнее на 40%
    вызов метода объекта медленнее на 8%
  • Trej Gun

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

    Spritz 18 марта 2008 г. 11:14, спустя 6 минут 8 секунд

    Я прошу прощения, как я сказал я не пишу на пхп, уже.

    а мои прогнозы практически подтвердились)))

    ЗЫ
    ghost, по поводу инклуда, прости я недосмотрел твой пример кода вначале.
  • vasa_c

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

    Spritz 18 марта 2008 г. 11:21, спустя 7 минут 4 секунды

    А теперь разделите 0,02 сек на 10 000 и поставьте третим циклом запрос к базе. И задумайтесь над тем, стоит ли об этом вообще думать.
    Умножение двух чисел тоже время забирает, лучше просто return true в функциях ставить.
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz 18 марта 2008 г. 11:25, спустя 3 минуты 18 секунд


    А теперь разделите 0,02 сек на 10 000 и поставьте третим циклом запрос к базе.

    только не 0.02 а 0.002..0.004 )
    и вообще APD рулит
    оптимизировать надо там, где это даст практическую, а не теоретическую выгоду
    обычно это действительно SQL-запросы
  • ghost

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

    Spritz 18 марта 2008 г. 12:15, спустя 49 минут 44 секунды

    mechanic, да ладна те.. писать надо на ф-циях, они самые быстрые.. и простые как полено.. ни те структуры ни доп заморочек типа private, свойств объекта опять таки… зато быстро..
    потом правда с кодом возиццо долго, потому как ни те структуры…

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