【发布时间】:2011-03-07 11:59:05
【问题描述】:
以下列方式访问类内函数中的全局变量是不好的编程 (PHP) 习惯吗?
class test{
function a(){
global $myvar;
..
}
function b(){
global $myvar;
..
}
}
谢谢。
【问题讨论】:
标签: php
以下列方式访问类内函数中的全局变量是不好的编程 (PHP) 习惯吗?
class test{
function a(){
global $myvar;
..
}
function b(){
global $myvar;
..
}
}
谢谢。
【问题讨论】:
标签: php
在我看来是。您始终可以使用构造函数将全局变量“发布”到您的方法,并通过字段保持链接。
【讨论】:
在我看来,是的,像您一样使用它不是一个好习惯。您可以将其用作
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;
..
}
}
【讨论】:
它并不优雅。您应该在构造函数中传递该 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();
【讨论】:
除非您确实必须这样做,否则您不应该这样做。如果有更好的方法可以做到这一点,那么就使用它。例如,有些人使用它来访问配置变量,但更好的方法是使用define() 语句或静态类和文件。
TL;DR - 仅在必须时才这样做。否则,不要。
【讨论】:
IMO 这太糟糕了。你让你的类依赖于一个外部变量。在不存在此变量的上下文中实例化的对象将不起作用。
将变量传递给类的构造函数。这样,只有提供了参数才能实例化对象。
【讨论】: