全球变量在课堂上

时间:2015-03-09 11:34:03

标签: php arrays class oop

我试图将Globals变量放在该类的另一个变量中。但它没有用。错误日志显示

  

语法错误,意外T_VARIABLE

class data{
    public $datav = $GLOBALS['dat'];

    public static function get(){
           return self::$datav;
    }

}

我也尝试过替换self::$datav;与$this->datav;但它也给出了同样的错误。

我也想知道有没有办法使用类外的变量。 e.g:

$datav = array{'name'=>'assadf','asdf'=>'asddf'}
 class data{

        public static function get(){
               return $datav['name'];
        }

    }

3 个答案:

答案 0 :(得分:1)

在类中使用像这样的全局变量而不是打破类的封装。

最好通过__construct($var)传递类似的值。但是由于你有一个定义为static的函数,我假设你想让这个类变为静态,所以不会为静态类调用__construct()

所以你必须创建一个像这样的setter方法: -

class data{
    public $datav = NULL;

    public static function set($var) {
        $this->datav = $var;
    }

    public static function get(){
           return $this->$datav;
    }

}

然后像

一样打电话给你的班级
data::set($GLOBALS['dat']);

$localVar = data::get();

答案 1 :(得分:-1)

必须为类属性分配一个常量值。此外,$datav必须是静态的才能从get方法访问。

class data{
    public static $datav;

    public static function get(){
        if(!isset(self::$datav)) {
            self::$datav = $GLOBALS['dat'];
        }
        return self::$datav;
    }
}

对于第二个代码,您可以使用global关键字告诉PHP您使用的变量来自外部作用域,而不是来自函数作用域:

$datav = array('name'=>'assadf','asdf'=>'asddf');
class data{
    public static function get(){
        global $datav;
        return $datav['name'];
    }
}

答案 2 :(得分:-2)

你应该使用global让PHP知道这是在类外声明的全局变量。

$datav = "something";

class Data {

    public static function get(){
           global $datav;
           return $datav;
    }

}