我的班级以外有一个全局变量= $ 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 = global $ MyNumber + 100;
答案 0 :(得分:49)
你可能不真的想要这样做,因为这将是调试的噩梦,但似乎有可能。关键是您在构造函数中通过 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上的维基百科文章;基本上,理想情况下,您的对象应该管理自己的数据以及修改数据的方法;一般来说,公共财产,恕我直言,这是一个坏主意。
答案 1 :(得分:10)
尽量避免使用全局变量,而是可以使用类似这样的东西
class myClass() {
private $myNumber;
public function setNumber($number) {
$this->myNumber = $number;
}
}
现在你可以打电话了
$class = new myClass();
$class->setNumber('1234');
答案 2 :(得分:6)
只需使用global keyword。
e.g:
class myClass() {
private function foo() {
global $MyNumber;
...
然后,然而,使用全局变量通常是不受欢迎的(它们会散发出糟糕的代码气味),因此可能想要考虑使用单例类来存储这种性质的东西。 (然而,再一次,在不知道你想要实现的目标的情况下,这可能是一个非常糟糕的主意 - define可能会更有用。)
答案 3 :(得分:2)
使用构造函数怎么样?
class myClass {
$myNumber = NULL;
public function __construct() {
global myNumber;
$this->myNumber = &myNumber;
}
public function foo() {
echo $this->myNumber;
}
}
或者更好的方式(在inicializin对象时将全局变量作为参数传递 - 只读)
class myClass {
$myNumber = NULL;
public function __construct($myNumber) {
$this->myNumber = $myNumber;
}
public function foo() {
echo $this->myNumber;
}
}
$instance = new myClass($myNumber);
答案 4 :(得分:2)
我所经历的是你无法直接将全局变量赋值给类变量。
class myClass() {
public $var = $GLOBALS['variable'];
public function func() {
var_dump($this->var);
}
}
使用上面的代码,您会收到错误消息“ 解析错误:语法错误,意外'$ GLOBALS' ”
但如果我们这样做,
class myClass() {
public $var = array();
public function __construct() {
$this->var = $GLOBALS['variable'];
}
public function func() {
var_dump($this->var);
}
}
我们的代码可以正常使用。
我们将一个全局变量赋给一个类变量必须在一个函数内部。我已经使用了构造函数。
因此,您可以使用 $ this-> var ;
在类的每个函数中访问您的全局变量答案 5 :(得分:1)
如果你想从一个类中访问一个属性,你应该:
private $classNumber = 8;
答案 6 :(得分:0)
类myClass { 受保护$ foo;
public function __construct(&$var)
{
$this->foo = &$var;
}
public function foo()
{
return ++$this->foo;
}
}