2012-01-28 9 views
0

誰かが私に次のPHPの行を説明できますか?phpクラスを含む3次if文

($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false; 

私はオブジェクトとその機能を理解しています。 $myobjectfunctionが定義されている場合はeval $myobjectfunctionと表示されますか?私が読んでいるコードでは、objectはまだこの行の前に定義されていません(時には)。

+0

「3値if文」のようなものはありません。また、この構文は、このサイト上の_allだけでなく、良いPHPの本にも含まれています_。どのような研究をしましたか? –

+0

また、 'object'が定義されていないと、このコードは解析されず、実行されません。 –

+0

'object :: function( 'letsgo')が返すものは何か不思議です。あなたは、コードがevalされたときに害を及ぼさないと確信しているようです。'eval()'が存在するのは良いことですが、実際には使用しないでください。 – Arjan

答えて

0

yaあなたはかなりよくIF $ myobjectfunctionが肯定的な結果(つまり:false、0、またはnullではない)を返したと言っていますが、新しい変数オブジェクトを評価していますが、 elseビットでは、id probabyはnullを使用します。これは何かをするため

は今、「オブジェクト」

5

この行は、関数から返された値を代入し、自分の正直な意見では、これはしかし、コードの不思議な作品です

を定義する必要がありませんobject::function('letsgo')を変数$myobjectfunctionに設定します。戻り値が真偽値(ブール値TRUE)であれば、その変数の内容はPHPコード(eval)として評価されます。最初の返品がFALSEだった場合、それ以上の措置はとられません。最後にfalseは基本的に何もしません。

これは、通常は何も使用されていないにもかかわらず、PHPが代入から値を返すためです。ただし、コードの場合は、代入からの戻り値を使用して、三項演算子のどの枝が括弧で囲まれているかを判断します。

$x = 3; 
// returns 3 even if we don't use it... 

括弧が初期割り当ての前後にあるため、これは珍しいことです。

($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false; 
//^^---------------------------------------------^^^ 

三項演算子のより典型的な使い方は次のよう=の右側に条件に基づいて、左側の変数に?のいずれかの側の出力を割り当てることになる。

$myobjectfunction = object::function('letsgo') ? $someothervalue : false; 
+0

"return">。< –

+0

そして、このケースでは、$ myobjectfunctionを使用しているので、これはもっと奇妙です。 –

+0

@LightnessRacesinOrbit実際...それを反映するために例が変更されました。説明のために –

1

ここで起こっていることを正確に伝えるのは難しいです。私は例を '単純化するためにあなたが実際の値に置き換えられたと仮定していますが、キーワードの使用は実際に問題を曇らせます。

'オブジェクト'クラスの宣言は、コード実行中のある時点でオブジェクトクラスが定義されている限り、このステートメントの前にある必要はありません。

+0

(a)質問に答えなかった。 (b)第2段落が間違っている。 –

+0

私はそれがコンパイルされ、決められた方法で動作すると言います。 –

+0

他の人がどのバージョンのPHPを使っているのかわかりませんが、私が座っていた場所からOPで提供されたコードは有効なPHPではありません。 –

1

このコードは、と等価である:すなわち

$myobjectfunction = object::function('letsgo'); 

if($myobjectfunction) { 
    eval($myobjectfunction); 
} 
else { 
    false; 
} 

、変数にobject::function('letsgo')の結果を割り当てます。その変数が「真実」(false、null、または0、またはfalseと評価される別の値でない場合)の場合、その内容はevalです。それ以外は何もしない。