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)
只需使用global关键字即可.
例如:
class myClass() {
private function foo() {
global $MyNumber;
...
Run Code Online (Sandbox Code Playgroud)
然后$ MyNumber将在该方法中变得可访问(并且实际上可修改).
但是,使用全局变量通常是不受欢迎的(它们可能会散发出糟糕的代码气味),因此您可能需要考虑使用单例类来存储这种性质的任何东西.(然而,再一次,在不知道你想要实现的目标的情况下,这可能是一个非常糟糕的主意 - 定义可能会更有用.)
归档时间: |
|
查看次数: |
154068 次 |
最近记录: |