Как правильно работает __get() ?

niko42

Новичок
Добрый день столкнулся с такой проблемой при реализации класса:

PHP:
class GET {

    public static $_vars, $_instance;

    /**
    * @return GET
    */
    public static function getInstance(){
        if(!isset(self::$_instance))
            self::$_instance = new GET();
        return self::$_instance;
    }

    public function __construct(){
        if(empty(self::$_vars))
            self::$_vars = $_GET;
        unset($this->pushState);
    }

    public function __get($name){
        return self::$_vars[$name];
    }

    public function __set($name, $value){
        self::$_vars[$name] = $value;
    }

    public function __isset($name){
        return isset(self::$_vars[$name]);
    }

    public function __unset($name){
        unset(self::$_vars[$name]);
    }
}
Вызываем: GET::getInstance()->trulyalya
Получаем: Notice: Undefined index: (ну понятно - нет индекса)
И почему оно так себя ведет?

P.S. использую PHP Version 5.5.17 (настройки самые мин., т.к. компилил руками)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
niko42, а ничего, что сингтон используется не так как у тебя? Почему конструктор публичный?

ЗЫ: потому что вызывать надо этот файл с ?trulyalya=xxx
 

niko42

Новичок
niko42, а ничего, что сингтон используется не так как у тебя? Почему конструктор публичный?
ЗЫ: потому что вызывать надо этот файл с ?trulyalya=xxx
Конструктор закроем.
Смысле сингл использует не так, как у меня - не много не понятно.

?trulyalya=xxx Да, но если взять такую конструкцию в доп.:
PHP:
switch(GET::getInstance()->sort){
                case "recommend" :
                    $sort = "`c`.`position` ASC";
                    break;
                case "like" :
                    $sort = "`p`.`like` DESC";
                    break;
                case "high_price" :
                    $sort = "`p`.`price` DESC";
                    break;
                case "low_price" :
                    $sort = "`p`.`price` ASC";
                    break;
                default:
                    $sort = "`c`.`position` ASC";
                    break;
            }
Т.е. я не хочу писать isset(GET::getInstance()->sort) а потом бежать по свитчу, т.к. не попаду в default
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
niko42, ну так допиши проверку, если нет такого ключа - возвращай null в _get
 

AmdY

Пью пиво
Команда форума
проверку не надо, для isset есть магический __isset, но я думаю здесь ничего не поможет.
 

niko42

Новичок
Последнее редактирование:
Сверху