2

コンストラクター内のプロパティへのアクセスに問題があります。

Class MyClass{

    public $stuff   = false;

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

}

経由で呼び出されます:

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

それでもfalseが返されます(したがって、「It Works!」は返されません)。

コンストラクターが変数を認識しないことは知っていますが、これを実現するための良い方法はありますか?

4

2 に答える 2

3

プロパティを設定する前にコンストラクターが呼び出されます。はif常にfalseと評価されます。

設定する場合はMyClass::stuff、コンストラクター引数を使用して設定します。次に例を示します。

public function __construct($stuff = false){
    if($this->stuff = $stuff){
        echo('It works!');
    }
}
$myclass = new MyClass(true);
于 2012-07-06T00:51:34.017 に答える
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! 

コンストラクターに何かを渡したいだけなら、なぜインスタンス変数を定義するのでしょうか? 以下で十分ではないでしょうか?後で参照する必要がない限り、その場合はTim Cooperの答え.

Class MyClass {

   function __construct($stuff = false){
      if ($stuff){ 
         echo 'You got some stuff!'; 
      } else { 
         echo 'You ain\'t got stuff!'; 
      }
   }
}
于 2012-07-06T01:14:43.373 に答える