我在类(class)之外有一个全局变量 = $MyNumber;
如何在 myClass 中将其声明为属性?
对于我类(class)中的每个方法,我都是这样做的:
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 = global $MyNumber + 100;
最佳答案
您可能不真的想要这样做,因为这将是调试的噩梦,但它似乎是可能的。关键是您在构造函数中通过 reference 分配的部分。
$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
这表明它是通过引用而不是值分配的。
正如我所说,调试将是一场噩梦,所以你真的不应该这样做。阅读关于 encapsulation 的维基百科文章;基本上,您的对象应该理想地管理自己的数据以及修改该数据的方法;恕我直言,即使是公共(public)属性(property)通常也是个坏主意。
关于PHP 类 : Global variable as property in class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4489134/