контекстная переменная php - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь создать глобальную контекстную переменную в одной из моих библиотек, но, похоже, не могу понять, как заставить переменную прикрепиться. Ниже приведен пример моего кода:

class test{
    function tester(){
        echo context::getContext();
        echo '<br />';
        context::setContext(2);
        echo context::getContext();
        echo '<br />';
        new test2();
    }
}
class test2{
    public function __construct(){
        echo context::getContext();
    }
}
class context{
    protected static $contextNum = 0;
    public function getContext(){
        return isset($this->contextNum) ? $this->contextNum : 0;
    }
    public function setContext($num){
        $this->contextNum = $num;
    }
}

Это заканчивается эхом:

0
2
0

Как я могу сделать так, чтобы он эхом отдавался?

0
2
2

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Попробуйте:

class context(){
    protected static $contextNum = 0;
    public function getContext(){
        return isset(self::$contextNum) ? self::$contextNum : 0;
    }
    public function setContext($num){
        self::$contextNum = $num;
    }
}

$this->contextNum используется для доступа к contextNum в качестве переменной экземпляра (т. Е. Переменной, существующей в экземпляре класса context), тогда как self::$contextNum -используется для доступа к нему как статической переменной.

0 голосов
/ 05 января 2012

Изменение

$this->contextNum = $num;
// and
return isset($this->contextNum) ? $this->contextNum : 0;

до

self::$contextNum = $num;
// and
return isset(self::$contextNum) ? self::$contextNum : 0;

Используйте статические модификаторы для методов setContext() и getContext()

Также я бы посоветовал вам добавить throw new Exception('Can\'t create instance of this class') к __construct() методу context.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...