私の目標は、複雑なロジックをif()ステートメントに入れることです。私は値の配列を持っていて、私の配列のすべてが0でないなら、少しのコードを実行するつもりです。通常、私は、$valid = true
、foreach
私の配列と言うことができ、0が見つかると$valid = false
と設定することができます。それからコードif ($valid)
を実行します。あるいは、私のループを関数に入れて、関数intop my if()
を置くこともできます。PHPのクロージャはIF文で何を返しますか?
しかし、私は怠け者だから、 "有効な"フラグがたくさん残っているのではなく、むしろ1つの場所で使用されている全く新しい機能を書くつもりはない。
それでは、私はこれを持っているとしましょう:
if ($q = function() { return 'foo'; }) {
echo $q;
}
else {
echo 'false';
}
私は真と評価され、if
は'foo'
を取得することを期待していました。私の閉鎖は$q
にコミットされ、ステートメントが実行されます。 $q
は文字列foo
を返し、 'foo'が出力されます。
代わりに、エラーObject of class Closure could not be converted to string
が表示されます。
それでは、代わりにこれを試してみましょう:私は私の関数が印刷される偽と「真」戻ってくることを期待していた
if (function() { return false; }) {
echo 'foo';
}
else {
echo 'true';
}
を。代わりに 'foo'が表示されます。
私がこれについてどうやってやっているのですか?それは言っているようです、 "はい、確かに機能です!"代わりに "いいえ、関数がfalseに評価されたため。私がやろうとしていることをする方法はありますか?
関数を戻り値と混同しているようです。 – delnan
私が望むのは 'if(function(){return false;}()){'で、Javascriptでは明らかに有効ですがPHPでは有効ではないと思います。 – ajp5103
http://stackoverflow.com/questions/3568410/anonymous-functions-that-execute-immediately call_user_func()は私が探していたものです。 – ajp5103