我在另一个自动加载的PHP文件中有一个由require_once()调用导入的PHP文件。在此文件中定义了少量字符串全局变量:
$foobar = "foo";
$bazqux = "baz";
class FooClass {
private $foo;
public function __construct() {
global $foobar;
$this->foo = $foobar; // $foobar is <null> here
}
}
但是,当我运行此代码时,根据Apache2下的XDebug(我使用VS.php作为我的IDE),全局变量$ foobar是“”。当我在IIS下的普通PHP FastCGI下运行脚本时,我遇到了同样的问题。
我已经浏览了所有代码,并且符号“$ foobar”仅出现在此源文件中,因此不会被其他地方覆盖。
我将它从全局变量更改为define()常量,并且工作正常。
有什么想法吗?
答案 0 :(得分:1)
使用超全球 - $GLOBALS
。
$this->foo = $GLOBALS["foobar"];
编辑:
<?php
$foobar = "foo";
$bazqux = "baz";
class FooClass {
private $foo;
public function __construct() {
global $foobar;
$this->foo = $foobar;
}
function display() {
print $this->foo;
}
}
$a=new FooClass;
print $a->display();
?>
答案 1 :(得分:1)
代码对我来说很好。代码没有错。它输出为foo
:
$foobar = "foo";
$bazqux = "baz";
class FooClass {
private $foo;
public function __construct() {
global $foobar;
$this->foo = $foobar; // $foobar is foo here
}
}
答案 2 :(得分:0)
仅仅因为这两个变量声明是include脚本中的第一件事并不意味着它们实际上在全局范围内。
在函数(自动加载器)中包含脚本会使它们驻留在函数本地范围内。您将不会注意到,因为您的自动加载器范围甚至不会保留它们。
解决方案:在分配脚本中最顶层的变量之前,还要使用global
语句。
答案 3 :(得分:0)
如果变量是非静态的,则必须调用$this->variable
;如果变量是静态的,则必须调用self::$variable
例如:
class Entry {
private static $y= "";
private $x= "";
public function start() {
$a=$this->x;
$b=self::$y;
}
}