我在构造函数中访问属性时遇到问题:
Class MyClass{
public $stuff = false;
public function __construct(){
if($this->stuff){ echo('It works!'); }
}
}
通过:
调用$myclass = new MyClass;
$myclass->stuff = true;
它仍然返回false(因此没有"它可以工作!")。
我知道构造函数不会看到变量,但有没有一种很好的方法来实现这个目标?
答案 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!';
}
}
}