2012-05-11 17 views
0

私はこの問題の原因を解決するために過去20分間を費やしました。なぜ、isset()は、設定された真であるブール変数に対してFALSEを返すのですか?

まず私はISSET呼び出す別のクラスでは

$this->is_csu = TRUE; 

を行います、ISSETは、私はすぐに変数をエコー場合、それはTRUEを返し、FALSEを返します。

bool(false) bool(true) 

の出力で

echo var_dump(isset($this->is_csu)); 
echo var_dump($this->is_csu); 
die(); 

結果、私はなぜこれが起こっていると、いくつかの技術的な理由があると確信しているが、それは今の私を超えています。

うまくいけば、誰かがこれについていくつかの光を当てることを望みます。

+4

クラス定義で宣言しましたか? 'クラスX {プライベート$ is_csu; } '? – Adam

+1

この問題を示す[SSCCE](http://sscce.org)を入力してください。 – deceze

+1

申し訳ありませんが、もっとコードが必要です。問題は、このクラスの2つの異なるインスタンスを作成していることです。したがって、あるインスタンスで変更すると、他のインスタンスは変更されません。 – Lefsler

答えて

2

おそらくプライベートメンバーのクラスを拡張しています。

これがどのように処理されるかについては、PHP Examplesを参照してください。

私はあなたの出力を取得するための唯一の方法は、例えば、クラスにPHPSにマジックメソッドを使用することです:

class A 
{ 
     public function __isset($n) 
     { 
       $this->$n = TRUE; 
     } 
} 

$bar = new A(); 
var_dump(isset($bar->foo)); 
var_dump($bar->foo); 

出力:私はあなたが既に知っていたと思うけど

bool(false) 
bool(true) 

あなたがそれらの1つを使っていたら。

+0

それはそうではありません:http://codepad.org/K3WytXBt – Sampson

+0

いいえ、それは拡張クラスで定義されていないためです。あなたは$ this-> AnythingYouLike = "Foobar"だけです。それはただの変数です。編集:それはあなたの前のコメントではなく、新しく編集されたコメントであった。 – ccKep

+0

その場合、OPが '$ this-> foo'を設定していますが、別のクラスを拡張しているので、どのように出力に影響しますか?彼が値を設定した場合、 'isset()'は 'false'を返すべきではありません。 – Sampson

0

私はその非常に古い質問を知っていますが、私にも起こりました。なぜ私はその理由を理解できませんでした。

この理由は、これが私的または保護されたメンバーであったため、その値を得ることはできましたが、issetはfalseを返しました。

var_dumpは反射を行っているので問題があります。

関連する問題