ФорумПрограммированиеPHP для идиотовPHP и ООП → Оправданность использования статических методов

Оправданность использования статических методов

  • Lirck

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

    Spritz 26 января 2009 г. 19:26

    Есть класс, для которого не нужно делать объект. Он должен работать в любом месте приложения.
    Нужно ли делать его синглотом, или просто сделать все методы статическими? Если нужно могу дать код.
  • Josh

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

    Spritz 26 января 2009 г. 19:32, спустя 5 минут 24 секунды

    Тебе нужно сколько экземпляров этого класа?
  • Lirck

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

    Spritz 26 января 2009 г. 19:33, спустя 1 минуту 32 секунды

    Один
  • phpdude

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

    Spritz 26 января 2009 г. 19:38, спустя 5 минут 2 секунды

    статический и синглтон - в корне разные вещи …

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

    определись что у перед тобой, потом думай :)
    Сапожник без сапог
  • Josh

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

    Spritz 26 января 2009 г. 19:41, спустя 2 минуты 57 секунд

    Можна сделать один синглтон а в нём уже куча классов для базы и прочей лабуды. Я думаю в этом случае как раз он ему и нужен
  • Lirck

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

    Spritz 26 января 2009 г. 19:41, спустя 13 секунд

    Вот что:
    class Languages
    {
    private static $_config = null;
    private static $keys = array();

    public static function config($config)
    {
    if (self::$_config == null)
    {
    self::$_config = $config;
    if (is_readable(self::$_config['dir'] . '/' . self::$_config['lang'] . '.php'))
    include_once self::$_config['dir'] . '/' . self::$_config['lang'] . '.php';
    else
    Messages::add('Language file not found');
    }
    else
    {
    $msg = self::parse('static_cofig');
    Messages::add($msg);
    }
    }

    public static function parse($key, $cat = 'sys')
    {
    if (isset(self::$_keys[$cat][$key]))
    return self::$_keys[$cat][$key];
    else
    {
    $msg = self::parse('lang_parse_error');
    Messages::add($msg);
    }
    }
    }
  • phpdude

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

    Spritz 26 января 2009 г. 19:47, спустя 6 минут 11 секунд

    self::$_config['dir'] . '/' . self::$_config['lang'] . '.php'

    вот это на самом деле сраный костыль. тут надо сингтон все-таки :)
    Сапожник без сапог
  • Josh

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

    Spritz 26 января 2009 г. 19:48, спустя 59 секунд

    class Base
    {
    private static $_instance = null;
    public static function get_instance()
    {
    if (Base::$_instance == null)
    {
    Base::$_instance = new Base();
    }
    return Base::$_instance;
    }
    }

    А потом Юзай в любом месте сайта
    Base::get_instance()->some_function();

    или гетер, короче всё что надо
  • Lirck

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

    Spritz 26 января 2009 г. 19:49, спустя 8 секунд

    Почему? =) Все работает. Мне нужен повод чтобы переписать =) И в чем тут костыль?
  • Lirck

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

    Spritz 26 января 2009 г. 19:49, спустя 42 секунды

    Josh, спасибо. Я знаю что такое Singlton.
  • Josh

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

    Spritz 26 января 2009 г. 19:50, спустя 1 минуту 3 секунды

    P.S. можешь добавить в __construct
    $this->Language = new Language;

    и соотвественно
    Base::get_instance()->Language->parse('blabla');
  • Josh

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

    Spritz 26 января 2009 г. 19:51, спустя 16 секунд

    так а чего спрашиваешь тогда? :)
  • Lirck

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

    Spritz 26 января 2009 г. 19:52, спустя 1 минуту 25 секунд

    phpdude, я так понял, костыль в том, что идет обращение к свойству?
  • phpdude

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

    Spritz 26 января 2009 г. 19:59, спустя 7 минут 1 секунду


    Почему? =) Все работает. Мне нужен повод чтобы переписать =) И в чем тут костыль?
    костыль в том, что ты используешь статическое свойство. да, работает конечно, но имхо это неправильно.
    Сапожник без сапог
  • Lirck

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

    Spritz 26 января 2009 г. 20:10, спустя 11 минут 16 секунд

    Ладно, переделал =)
    class Languages
    {
    private static $_instance = null;
    private $_config = null;
    private $keys = array();

    public static function instance()
    {
    $class = __CLASS__;
    if (self::$_instance == null)
    self::$_instance = new $class();
    return self::$_instance;
    }

    public function config($config)
    {
    if ($this->_config == null)
    {
    $this->_config = $config;
    if (is_readable($this->_config['dir'] . '/' . $this->_config['lang'] . '.php'))
    include_once $this->_config['dir'] . '/' . $this->_config['lang'] . '.php';
    else
    Messages::add('Language file not found');
    }
    else
    {
    $msg = $this->parse('static_cofig');
    Messages::add($msg);
    }
    }

    public function parse($key, $cat = 'sys')
    {
    if (isset($this->keys[$cat][$key]))
    return $this->keys[$cat][$key];
    else
    {
    $msg = $this->parse('lang_parse_error');
    Messages::add($msg);
    }
    }

    private function __construct() {}
    private function __clone() {}
    }


    Есть еще какие-нибудь замечания по классу? =)

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