【问题标题】:Class Property Containing a Global Variable [duplicate]包含全局变量的类属性
【发布时间】:2013-09-23 18:20:15
【问题描述】:

我想知道是否有一种方法可以将全局变量存储在类属性中,以便类中的方法可以轻松使用它。

例如:

$variableGlobal = 30;

Class myClass{

    public $classProperty = global $variableGlobal;

    function myFunction(){
       $accessible = $this->classProperty;
}

现在我知道我可以通过简单地在类函数中调用它来获取全局变量,如下所示:

function myfunction(){
    global $variableGlobal;
}

我认为示例 1 中存在我想要的东西,但我可能完全错了,或者我是对的,但我正在以完全错误的方式接近这个问题。任何想法都会非常感谢。

忘记提及,我很乐意不使用全局变量,而是将另一个类函数的结果存储在类变量中

像这样:

public $var = OtherClass::ClassFunction();

【问题讨论】:

  • 在实例化类时将值注入构造函数,并将其设置为标准类属性

标签: php variables global


【解决方案1】:

您想要的值应该可以在 GLOBALS 变量中的任何位置使用,使用变量名作为键。

public $classProperty = GLOBALS[$variableGlobal]

但是,我建议,为了避免不必要的耦合并允许测试,您可能希望将全局中的值传递给类。

【讨论】:

    【解决方案2】:

    您可以使用构造方法并通过引用传递。在实例化类时将值注入到构造函数中,通过reference operator&,可以随时访问全局变量并获取当前值。

    您也可以通过类中的 $GLOBAL 结构访问全局。请参阅此处的示例:

    <?php
    
    $variableGlobal = 30;
    
    class myClass{
    
        public $classProperty;
    
        public function __construct(&$globalVar){
            $this->classProperty = &$globalVar;
        }
    
        public function myFunction(){
           $accessible = $this->classProperty;
            // do something interesting
            print "$accessible\n";
        }
    
        public function accessGlobal(){
            print $GLOBALS["variableGlobal"] . "\n";
        }
    
    }
    
    
    $thisClass = new myClass($variableGlobal);
    $thisClass->myFunction();
    $GLOBALS["variableGlobal"] = 44;
    $thisClass->myFunction();
    $variableGlobal = 23;
    $thisClass->accessGlobal();
    

    推荐阅读

    【讨论】:

      【解决方案3】:

      想通了,用另一个问题解决了我的问题:

      PHP class: Global variable as property in class

      【讨论】:

        猜你喜欢
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 2019-11-07
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-22
        相关资源
        最近更新 更多