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

Zeb*_*bra 30 php variables methods class

我的班级以外有一个全局变量= $ MyNumber;


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

class myClass() {

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

}
Run Code Online (Sandbox Code Playgroud)



我要这个

class myClass() {

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

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

}
Run Code Online (Sandbox Code Playgroud)



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

类似于:var $ classNumber = global $ MyNumber + 100;

El *_*obo 52

你可能真要这么做,因为这将是一场噩梦调试,但它似乎是不可能的.键是在构造函数中通过引用分配的部分.

$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";
Run Code Online (Sandbox Code Playgroud)

输出将是

1
2
Run Code Online (Sandbox Code Playgroud)

表示它是通过引用分配的,而不是值.

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


mrw*_*ter 10

尽量避免使用全局变量,而是可以使用类似的东西

class myClass() {
 private $myNumber;

 public function setNumber($number) {
  $this->myNumber = $number;
 }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以打电话了

$class = new myClass();
$class->setNumber('1234');
Run Code Online (Sandbox Code Playgroud)


Joh*_*ker 6

只需使用global关键字即可.

例如:

class myClass() {
    private function foo() {
        global $MyNumber;
        ...
Run Code Online (Sandbox Code Playgroud)

然后$ MyNumber将在该方法中变得可访问(并且实际上可修改).

但是,使用全局变量通常是不受欢迎的(它们可能会散发出糟糕的代码气味),因此您可能需要考虑使用单例类来存储这种性质的任何东西.(然而,再一次,在不知道你想要实现的目标的情况下,这可能是一个非常糟糕的主意 - 定义可能会更有用.)