【问题标题】:Is it bad programming practice? [duplicate]这是不好的编程习惯吗? [复制]
【发布时间】:2011-03-07 11:59:05
【问题描述】:

可能重复:
[PHP] global in functions

以下列方式访问类内函数中的全局变量是不好的编程 (PHP) 习惯吗?

class test{

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

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

}

谢谢。

【问题讨论】:

    标签: php


    【解决方案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;
             ..
            }
          }
      

      【讨论】:

      • 这就是我的意思,谢谢你的例子。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          IMO 这太糟糕了。你让你的类依赖于一个外部变量。在不存在此变量的上下文中实例化的对象将不起作用。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-16
            • 2016-06-27
            • 2015-05-08
            相关资源
            最近更新 更多