这是不好的编程习惯吗?

时间:2011-03-07 11:59:06

标签: php

  

可能重复:
  [PHP] global in functions

以下列方式访问类中函数中的全局变量是不是很糟糕的编程(PHP)实践?

class test{

function a(){
global $myvar;
..
}

function b(){
global $myvar;
..
}

}

感谢。

5 个答案:

答案 0 :(得分:3)

在我看来是的。您始终可以使用构造函数将全局变量“发布”到方法中,并通过字段保持链接。

答案 1 :(得分:2)

在我看来,是的,这不是一个像你一样使用的好习惯。您可以将其用作

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;
       ..
      }
    }

答案 2 :(得分:1)

不优雅。您应该在构造函数中传递该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(); 

答案 3 :(得分:0)

除非你必须这样做,否则你不应该做那样的事情。如果有更好的方法可以做到有意义,那就使用它。例如,有些人使用它来访问配置变量,但更好的方法是使用define()语句或静态类和文件。

TL; DR - 只有在必要时才这样做。否则,不要。

答案 4 :(得分:0)

IMO非常糟糕。您使您的类依赖于外部变量。在此变量不存在的上下文中实例化的对象将不起作用。

将变量传递给类的构造函数。这样,只有在提供参数时才能实例化对象。