不知道为什么这是它的工作方式,但是,如果你删除&在$this前面将它分配给你的全局变量时,它会起作用.
为了说明这一点,以下部分代码:
$global_obj = null;
class my_class
{
public $my_value;
public function __construct()
{
global $global_obj;
$global_obj = $this;
}
}
$a = new my_class;
$a->my_value = 5;
$global_obj->my_value = 10;
echo $a->my_value;
给出以下输出:
10
以下是与您的代码的差异:
>我删除&在$this之前:使用PHP 5时,在处理对象时不需要这样做
>我将代码翻译成真正的PHP 5:
> __构建constructor
>使用public / protected / private,而不是properties的var
作为旁注,您发布的代码应该给您以下警告:
Strict standards: Creating default object from empty value
备注:
>我使用的是PHP 5.3.2
> E_ALL不包含E_STRICT(source)
经过多次搜索后编辑:
If you assign a reference to a
variable declared global inside a
function, the reference will be
visible only inside the function.
You
can avoid this by using the $GLOBALS
array.
并且有一个例子.
尝试在代码中使用$GLOBALS,我有这部分代码:
$global_obj = null;
class my_class
{
public $my_value;
public function __construct()
{
$GLOBALS['global_obj'] = & $this;
}
}
$a = new my_class;
$a->my_value = 5;
$global_obj->my_value = 10;
echo $a->my_value;
我得到以下输出:
10
这似乎工作;-)
如果我用这样替换__construct方法:
public function __construct()
{
global $global_obj;
$global_obj = & $this;
}
它不起作用……
所以看来你不应该使用global,这里是$GLOBALS.
手册中给出的解释是:
Think about global $var; as a
shortcut to $var =&
$GLOBALS['var'];.
Thus assigning
another reference to $var only
changes the local variable’s
reference.
并且,就这样说:使用全局变量通常不是一个好主意 – 而且,在这种特定情况下,感觉这是一个非常糟糕的主意……
(现在,如果这个问题只是为了理解为什么……好吧,我能理解你的好奇心;-))