2012-04-21 22 views
11

私は多くのチェックと計算を行い、カスタムクラスreturnMessageを返すメソッドを持っています。 returnMessageには2つのブール値と1つの文字列があります。私がやりたいことは、メインクラスのwhileループでこのメソッドを実行し、whileループが最後に終了した後にreturnMessageオブジェクトにアクセスできるようにすることです。これはしかし、これは私のJavaのboolean予想誤差を与えるように割り当てるしようとしてwhileループwhile条件変数を変数に代入しますか?

while ($returned = myObject->myMethod()->finished) 
{ 

} 

if($returned -> finished == FALSE) 
{ 
... 
} 

の場合であるPHPで

(上記では、PHPのエラーがあるかもしれない、それは遅:D)

+0

PHPとJavaの違いは、Java *の 'while'はブール型の式を必要とすることです(' someVar = boolExpr'自体がブール型の式です)。割り当てられた変数が 'bool'だった場合、それは同じになります。 *ブール以外のものが割り当てられている可能性が高いので、現在のJavaコードを表示してください。どんな場合でも、例外はほとんどありませんが、私はこのイディオムを使用しないことをお勧めします。 –

答えて

27

私たちはあなたのコードの詳細を参照する必要があるが、私はこのような何かが仕事だと思う少し推測:

ReturnMessage returned; 
while (!(returned = myObject.myMethod()).finished) { 

} 
if (!returned.finished) { 

} 
1

これはそう

while((returned=myObject.myMethod()).isFinished()){ 

} 

または(returned=myObject.myMethod())より正確には、オブジェクトがreturnedに戻り、あなたが通常のようにそれを使用することができます割り当てのようなことも可能ですVAR

2

PHPで許容できるが、私は(私はPHPでコードしない)と思いますが、 Javaの条件内で代入を行うことは非常に悪い形式とみなされます。 (これはエラーが起こりやすく、非常に見つけにくいため、多くのコードの中で=と==の間に違いがあります。これはCとC++の長年の経験に基づく意図的な選択でした)

それは、私はあなたのコードに従うことができません。 returnMessageには2つのブール値と文字列がありますが、PHPで理解できるように、このテストはmyObject->myMethod()->finished != nullで、returnedfinishedの値に設定されていますが、$returned -> finishedmyObject->myMethod()->finished->finishedと同じです。 PHPの構文を誤解して申し訳ありません。

Javaで一般的な推奨事項は、の線に沿ってより次のようになります。私はPHPを誤解している場合、私に知らせて、私は一致するように、Javaコードを修正します

ReturnMessage returned = myObject.myMethod().getFinished(); 
while (returned != null) { 

    ... 

    returned = myObject.myMethod().getFinished(); // or did you mean myObject.myMethod(); 
} 

if (!returned.finished) { // or, better: if (!returned.isFinished()) 
    ... 
} 

+0

これは決してwhileループに入りません。 – Highstead

+0

@Highstead:修正されました。 –