【问题标题】:PHP access property in constructor构造函数中的 PHP 访问属性
【发布时间】:2012-07-06 10:59:23
【问题描述】:

我在访问构造函数中的属性时遇到问题:

Class MyClass{

    public $stuff   = false;

    public function __construct(){
        if($this->stuff){ echo('It works!'); }
    }

}

调用方式:

$myclass = new MyClass;
$myclass->stuff = true;

它仍然返回 false(因此没有“它有效!”)。

我知道构造函数不会看到变量,但是有没有好的方法来实现这一点?

【问题讨论】:

    标签: php oop constructor


    【解决方案1】:

    在设置属性之前调用构造函数。 if 将始终评估为 false。

    如果要设置MyClass::stuff,通过构造函数参数设置,例如:

    public function __construct($stuff = false){
        if($this->stuff = $stuff){
            echo('It works!');
        }
    }
    
    $myclass = new MyClass(true);
    

    【讨论】:

      【解决方案2】:

      我不明白 $stuff 的意义

      public $stuff   = false;
      

      设置为 false 并在构造函数中立即检查的实例变量。这个变量不会改变,除非它被实例化。我认为您可能一直在寻找的是一个静态变量。

      Class MyClass{
      
          public static $stuff = false;
      
          function __construct(){ // you don't have to specify the constructor as public
              if (self::$stuff){ 
                 echo 'You got some stuff!'; 
              } else { 
                 echo 'You ain\'t got stuff!'; 
              }
          }
      
      }
      
      
      $myclass = new MyClass(); // You ain't got stuff!
      
      
      MyClass::$stuff = true;
      $myclass = new MyClass(); // You got some stuff!
      

      如果它打算成为一个实例变量,那么你唯一需要的就是在子类化时

      Class MyClass{
      
          public $stuff = false;
      
          function __construct(){ 
              if ($this->stuff){ 
                 echo 'You got some stuff!'; 
              } else { 
                 echo 'You ain\'t got stuff!'; 
              }
          }
      
      }
      
      
      class MySubClass extends MyClass {    
          public $stuff = true;    
      }
      
      
      $mysub = new MySubClass() // You got some stuff! 
      

      如果你只是想把东西传递给构造函数,为什么还要定义一个实例变量呢? 以下内容不应该足够吗?除非您稍后必须参考它,在这种情况下,蒂姆库珀的回答。

      Class MyClass {
      
         function __construct($stuff = false){
            if ($stuff){ 
               echo 'You got some stuff!'; 
            } else { 
               echo 'You ain\'t got stuff!'; 
            }
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 2016-08-06
        • 2014-12-10
        • 1970-01-01
        • 2016-07-26
        • 1970-01-01
        • 2019-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多