PHP 类:全局变量作为类中的属性

2022-08-30 12:37:03

我的类外有一个全局变量 = $MyNumber;


如何在 myClass 中将其声明为属性?
对于我班上的每一种方法,我都是这样做的:

class myClass() {

    private function foo() {
         $privateNumber = $GLOBALS['MyNumber'];
    }

}



我想要这个

class myClass() {

    //What goes here?
    var $classNumber = ???//the global $MyNumber;

    private function foo() {
         $privateNumber = $this->classNumber;
    }

}



编辑:我想基于全局$MyNumber创建一个变量,但在
方法中使用它之前进行了修改

例如:var $classNumber = 全局 $MyNumber + 100;


答案 1

你可能真的不想这样做,因为调试将是一场噩梦,但这似乎是可能的。关键是在构造函数中按引用分配的部分。

$GLOBALS = array(
    'MyNumber' => 1
);

class Foo {
    protected $glob;

    public function __construct() {
        global $GLOBALS;
        $this->glob =& $GLOBALS;
    }

    public function getGlob() {
        return $this->glob['MyNumber'];
    }
}

$f = new Foo;

echo $f->getGlob() . "\n";
$GLOBALS['MyNumber'] = 2;
echo $f->getGlob() . "\n";

输出将为

1
2

这表示它是通过引用而不是值分配的。

正如我所说,调试将是一场噩梦,所以你真的不应该这样做。通读一下维基百科上关于封装的文章;基本上,理想情况下,您的对象应该管理自己的数据以及修改该数据的方法;恕我直言,即使是公共财产通常也是一个坏主意。


答案 2

尽量避免全局变量,相反,您可以使用类似这样的东西

class myClass() {
 private $myNumber;

 public function setNumber($number) {
  $this->myNumber = $number;
 }
}

现在您可以致电

$class = new myClass();
$class->setNumber('1234');

推荐