首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类中的全局变量

类中的全局变量
EN

Stack Overflow用户
提问于 2015-03-09 11:34:03
回答 3查看 49关注 0票数 0

我正在尝试将Globals变量放入该类的另一个变量中。但这是行不通的。显示错误日志

语法错误,意外的T_VARIABLE

代码语言:javascript
复制
class data{
    public $datav = $GLOBALS['dat'];

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

}

我也尝试过用self::$datav;替换$this->datav;,但这也会导致同样的错误。

我还想知道是否有任何方法来使用这个变量,它在类之外。例如:

代码语言:javascript
复制
$datav = array{'name'=>'assadf','asdf'=>'asddf'}
 class data{

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

    }
EN

回答 3

Stack Overflow用户

发布于 2015-03-09 11:44:39

在类中使用这样的全局,会破坏类的封装。

最好通过__construct($var)传递这样的值。但是,由于您有一个定义为静态的函数,我假设您希望使这个类是静态的,这样就不会为静态类调用__construct()

因此,您必须创建一个setter方法,如下所示:

代码语言:javascript
复制
class data{
    public $datav = NULL;

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

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

}

然后打电话给你的班级

代码语言:javascript
复制
data::set($GLOBALS['dat']);

$localVar = data::get();
票数 1
EN

Stack Overflow用户

发布于 2015-03-09 11:46:27

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

代码语言:javascript
复制
class data{
    public static $datav;

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

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

代码语言:javascript
复制
$datav = array('name'=>'assadf','asdf'=>'asddf');
class data{
    public static function get(){
        global $datav;
        return $datav['name'];
    }
}
票数 -1
EN

Stack Overflow用户

发布于 2015-03-09 11:40:11

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

代码语言:javascript
复制
$datav = "something";

class Data {

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

}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28941006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档