【问题标题】:Accessing variables from within a function within a class (scopes?)从类中的函数内访问变量(范围?)
【发布时间】:2011-02-06 17:08:22
【问题描述】:

我对课程还很陌生,我一直在网上寻找有关这方面的某种教程,但不幸的是,我未能找到解决方案。你们能给我的任何帮助将不胜感激。

我有 2 个文件。

1) variables.inc.php:

$myvar = "hello world";

2) myclass.php:

include("variables.inc.php");
class myClass {

    function doSomething() {
        echo "myvar: $myvar";
    }
}

问题: $myvar 返回空。我尝试在function doSomething() {echo...: global $myvar; 之间添加这一行 但它似乎也不是那样工作的。有什么建议吗?

【问题讨论】:

    标签: php class function variables scopes


    【解决方案1】:

    $myvar 在全局范围内定义。

    如果确实需要访问则

    function doSomething() { global $myvar; echo "myvar: $myvar"; }
    

    但是,在其他范围内使用全局变量被认为是不好的做法。

    查看PHP官方手册中的Variable scope章节以获得更详细的解释。

    【讨论】:

    • 为什么会被认为是不好的做法?
    • @Jay: Try this,或者我的own answer also explains why之一。
    • 如果您知道这是一种不好的做法,为什么建议这样做? ;s
    • @meze:我建议不要使用全局变量。提供代码是为了解释全局变量的工作原理。
    • @Jay:主要是因为类和函数的一个目的是将变量封装到声明它们的代码区域中。这样做是为了促进自动内存管理并降低在其他地方意外重用现有变量的风险。与全球同行几乎违背了这些目标。
    【解决方案2】:
    function doSomething() {
      global $myvar;
      echo "myvar: $myvar";  
    }  
    

    【讨论】:

      【解决方案3】:

      切勿在课程中使用global

      如果你的类中需要一个变量,那么将它注入到方法或构造函数中:

      class myClass {
      
      function doSomething($myvar) { echo "myvar: $myvar"; }
      
      }
      
      $obj = new myClass;
      $obj->doSomething($myvar);
      

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多