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

непонятки с ООП

  • Абырвалг

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

    Spritz Май 8, 2010, 11:46 п.п., спустя 20 минут 59 секунд

    тогда сразу делай адаптеры. И внутри своего logout делай $this->adapter->logout
  • kostyl

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

    Spritz Май 9, 2010, 1:36 д.п., спустя 1 час 49 минут 38 секунд

    Синглтон для единственности экземпляра класс. Это делается для ЕДИНСТВЕННОСТИ. Если ты, например, добавляешь объекты в поле класс, например в массив, то ты можешь добавить объекты в один экземпляр, а можешь в несколько. Так вот если тебе надо только в один, то надо использовать синглтон. Вот такой синий расклад ))
  • artoodetoo

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

    Spritz Май 9, 2010, 7:07 д.п., спустя 5 часов 31 минуту 5 секунд

    SpartakuS, варианты:
    - Singleton (т.к. статический метод можно вызвать из любой области видимости)
    - Registry (т.к. статический метод можно вызвать из любой области видимости)
    - передать готовый объект класса Cookie в конструктор User и сохранить в свойстве юзера.

    Почитай про Инверсию зависимости
    ιιlllιlllι унц-унц
  • krasun

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

    Spritz Май 10, 2010, 8:13 п.п., спустя 1 день 13 часов 6 минут

    добавлю еще ссылку к artoodetoo, про S.O.L.I.D вкратце - http://blog.byndyu.ru/2009/10/solid.html
  • VaseninM

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

    Spritz Май 10, 2010, 10:23 п.п., спустя 2 часа 9 минут 19 секунд

    artoodetoo, krasun,
    спасибо.
  • VaseninM

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

    Spritz Май 31, 2010, 10:23 п.п., спустя 20 дней 23 часа 59 минут

    Что то типа синглтон хранилища для глобал переменных. Хуита?
    <?php
    /*
     * Статический singlton класс, который служит для глобализации классов.
     *
     * @author vaseninm
     * @version 1.0
     *
     */
    class Pixelio {
      
        /*
         * Переменная в которой будет записан объект
         * @name $instance
         */
        static private $instance = NULL;
    
        static function get()
        {
            if (self::$instance == NULL) {
                self::$instance = new Pixelio();
            }
            return self::$instance;
        }
    
        static function set($name, $var)
        {
            if (self::$instance == NULL) {
                self::$instance = new Pixelio();
            }
            self::$instance->{$name} = $var;
        }
    
        private function __construct(){}
    
        private function __clone(){}
    
    }
    ?>
    
  • Абырвалг

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

    Spritz Май 31, 2010, 10:27 п.п., спустя 4 минуты 35 секунд

            if (self::$instance == NULL)  {
                self::$instance = new Pixelio();
            }

    нахуй это?
    заведи статическую переменную и в ней храни данные
  • NRG

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

    Spritz Май 31, 2010, 10:31 п.п., спустя 4 минуты 12 секунд

    SpartakuS, вопервых метод укажи область видимости (паблик, протектед, приват)
    это что за нах ?
    self::$instance = new Pixelio();

    ты же вроде пишешь что класс статический
    Спустя 18 сек.
    блять, миня апиридили
    Спустя 67 сек.
    
    
        /**
         * Registry collection
         *
         * @var array
         */
        static private $_registry = array();
    
        /**
         * Retrieve a value from registry by a key
         *
         * @param string $key
         * @return mixed
         */
        public static function registry($key)
        {
            if (isset(self::$_registry[$key])) {
                return self::$_registry[$key];
            }
            return null;
        }
    
        /**
         * Register a new variable
         *
         * @param string $key
         * @param mixed $value
         * @param bool $graceful
         * @throws Mage_Core_Exception
         */
        public static function register($key, $value, $graceful = false)
        {
            if (isset(self::$_registry[$key])) {
                if ($graceful) {
                    return;
                }
                self::throwException('Mage registry key "'.$key.'" already exists');
            }
            self::$_registry[$key] = $value;
        }
    
  • VaseninM

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

    Spritz Май 31, 2010, 10:33 п.п., спустя 1 минуту 28 секунд

    Абырвалг, так чтоли?
    class Pixelio {
     
        /*
         * Переменная в которой будет записан объект
         * @name $instance
         */
     
        static public function get($name)
        {
            return $this->{$name} ;
        }
     
        static public function set($name, $var)
        {
            $this->{$name} = $var;
        }
    } 
  • Абырвалг

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

    Spritz Май 31, 2010, 10:34 п.п., спустя 1 минуту 37 секунд

    внутри статик нельзя $this использовать
    self::$container[$name] = $var
    Спустя 43 сек.
    блять, миня апиридили

    хе-хе)
  • VaseninM

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

    Spritz Май 31, 2010, 10:43 п.п., спустя 8 минут 41 секунду

    А бля. Ну да.
  • VaseninM

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

    Spritz Май 31, 2010, 11:14 п.п., спустя 30 минут 43 секунды

    <?php
    /*
     * Статический singlton класс, который служит для глобализации классов.
     *
     * @author vaseninm
     * @version 1.0
     *
     */
    class Pixelio {
      
    
        static private $_registry;
    
        /*
         * Доступ к классу. Получение переменных.
         * @name get
         * @param name
         * @return object
         */
        static function get($name)
        {   
            return self::$_registry[$name] ? self::$_registry[$name] : NULL;
        }
    
        /*
         * Записываем переменную в хранилище
         * @param $name Имя для обращения Pixelio::get('name')
         * @param $var Объект класса, к которому мы будем обращатся
         * @return bool
         */
        static function set($name, $var)
        {
            if (isset(self::$_registry[$name])) {
                throw new Exception ('Такой объект уже записан.');
            } else {
                self::$_registry[$name] = $var;
                return true;
            }
        }
    
    }
    ?>
    
    

    Вот так?
  • VaseninM

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

    Spritz Май 31, 2010, 11:04 п.п., спустя 23 часа 50 минут 31 секунду

    А ну в общем так. У нрг почти так же.
    Спустя 29 сек.
    А че посты не склеиваются?
    Спустя 14 сек.
    О бля. Склеиваются.
  • Абырвалг

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

    Spritz Май 31, 2010, 11:05 п.п., спустя 1 минуту

            if (self::$_registry[$name]) {
                return self::$_registry[$name];
            } else {
                return NULL;
            }

    можно через тренарный оператор в одну строку свернуть

    self::$instance->{$name} = $var;
    +++ self::$registry[$name] = $var;
  • NRG

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

    Spritz Май 31, 2010, 11:10 п.п., спустя 4 минуты 58 секунд


            if (self::$_registry[$name]) {
                return self::$_registry[$name];
            } else {
                return NULL;
            }

    можно через тренарный оператор в одну строку свернуть
    спасибо кэп =)

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