它是不好的编程(PHP)的做法来访问一个全局变量的函数的类里面下列方式?
class test{
function a(){
global $myvar;
..
}
function b(){
global $myvar;
..
}
}
谢谢。
它是不好的编程(PHP)的做法来访问一个全局变量的函数的类里面下列方式?
class test{
function a(){
global $myvar;
..
}
function b(){
global $myvar;
..
}
}
谢谢。
它不是优雅的。您应该在构造函数中传递该var,并将其保存到类中,以便在每个函数中使用private $var
,并使用简单的$this->var
。
$myUnicorn = "Pink";
class Unicorn {
private $currentUnicorn;
public function __construct($current) {
$this->currentUnicorn = $current;
}
public function echoIt() {
echo $this->currentUnicorn;
}
public function killIt() {
unset($this->currentUnicorn); // :(
}
}
$u = new Unicorn($myUnicorn);
$u->killIt();
在我看来,它是。您可以随时使用构造函数将您的全局变量“发布”为您的方法,并在字段中保留链接。
在我看来,是的,它不是一个像你一样使用的好习惯。你可以使用这个作为
class test{
private $myVar;
function __construct($myVar)
{
$this->myVar = $myVar;
}
function a(){
echo $this->myvar;
..
}
}
class test{
private $myVar;
function __construct()
{
global $myVar;
$this->myVar = $myVar;
}
function a(){
echo $this->myvar;
..
}
}
你不应该这样做,除非你肯定要这样做。如果有更好的方法可以做到这一点,那就使用它。例如,有些人使用它来访问配置变量,但更好的方法是使用define()
语句或静态类和文件。
TL; DR - 只有在必须的情况下才可以。否则,不要。
海事组织是非常糟糕的。你让你的课程依赖于一个外部变量。在这个变量不存在的上下文中实例化的对象将不起作用。
将变量传递给类的构造函数。这样,只有提供参数时才能实例化对象。
这就是我的意思,谢谢你的例子。 – 2011-03-07 12:04:33