【问题标题】:How to access member variables of a constructor outside of it in php如何在php中访问构造函数之外的成员变量
【发布时间】:2014-07-07 12:36:00
【问题描述】:

我做了以下示例类

class a{

 function __construct(){
    $a =10;
    $b=9;
    }


}

$z=new a();

我想知道如何使用对象(或通过其他方式)访问 $a 和 $b 以执行单个 $a + $b 加法。我知道这可以使用超级全局数组来完成,但我想知道是否有其他方法可以做到这一点,而不是声明它们是全局的。

我知道代码没有多大意义,但出于示例目的这样做

【问题讨论】:

    标签: php class constructor


    【解决方案1】:

    将这些变量改为属性:

    class a
    {
        public $a;
        public $b;
    
        public function __construct() {
            $this->a = 10;
            $this->b = 9;
        }
    }
    
    $z = new a();
    echo $z->a;
    

    更好的是,将您的操作抽象为一个函数:

    echo $z->addProperties();
    
    // Inside a class
    public function addProperties() {
        return $this->a + $this->b;
    }
    

    稍后,当您想要添加需要添加到其他两个属性的第三个属性(或者甚至减去或乘以)时,您所要做的就是更改您的 a 类,而不是任何代码实际使用它。

    【讨论】:

      【解决方案2】:

      按名称构造函数用于对象在使用之前可能需要的任何初始化。因此,如果您按照自己的方式行事

      function __construct(){
          $a =10;
          $b=9;
          }
      

      变量 $a 和 $b 的作用域仅限于函数 __construct()。

      你可能需要 $a & $b 作为类变量而不是函数的东西

      class a{
       public $a;
       public $b;
       function __construct(){
          $this->a =10;
          $this->b=9;
       }
      }
      
      $z=new a();
      // access a & b as
      $z->a ; $z->b
      

      这里的构造函数会在你实例化对象时完成变量的初始化工作。

      【讨论】:

        【解决方案3】:

        在您的示例中,函数中有两个局部变量。您应该创建类字段以通过对象访问它们:

        class a {
        
            public $a;
            public $b;
        
            function __construct() {
                $this->a = 10;
                $this->b = 9;
            }
        } 
        

        $z = new a();

        回声 $z->a;

        回声 $z->b;

        【讨论】:

        • 如果你想直接访问它们,你不应该将属性设为私有...改为公开
        【解决方案4】:

        即使你这样做了,你也不能在 cunstructor 中返回:

            class a{
             public $a;
             public $b;
             function __construct(){
                $this->a =10;
                $this->b=9;
                return 19;
             }
            }
        $b = new a();
        var_dump($b);
        

        你会得到一个 a 的实例,因此你有其他选择: 制作一个新方法:

        <?php
        function add()
        {
           return $this->a+$this->b;
        }
        ?>
        

        或者生成getter`s(对于两者)=>

        <?php
        function getA()
        {
           return $this->a;
        }
        ?>
        

        或者将它们声明为公开并访问它们:

        $z->a+$z->b;
        

        这取决于您的应用架构或您可能拥有或想要施加的限制

        【讨论】:

        • 我知道可以制作函数,但想通过构造函数来完成。实验
        • 你为什么要这样做?如果您想将新变量 'd' 设置为 A 和 B 的总和并访问它或编写一个函数来检索它。
        猜你喜欢
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 2012-06-30
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2012-08-21
        • 2021-11-17
        相关资源
        最近更新 更多