构造函数中的PHP访问属性

时间:2012-07-06 00:49:12

标签: php oop constructor

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

Class MyClass{

    public $stuff   = false;

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

}

通过:

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

它仍然返回false(因此没有"它可以工作!")。

我知道构造函数不会看到变量,但有没有一种很好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

我没有看到$ 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!'; 
      }
   }
}