私はphp.netの演算子の優先順位セクションを通過すると違い:演算子の優先順位と短絡が
$a = 1;
$b = null;
$c = isset($a) && isset($b);
$d = (isset($a) and isset($b));
$e = isset($a) and isset($b);
var_dump($a, $b, $c, $d, $e);
//Result:
int(1)
NULL
bool(false)
bool(false) <== I get this
bool(true) <== I do not get this
は、私はデバッグのかなり多くを使用すると言うthis exampleに出くわしました。冗長なprint(_r)文を私のコードに入れて、私がコード内のどこにいるかを記録しておきます。だから私は$debug and print_r($dataArray)
または$verbose and print "Updating dataArray\n"
をコード間の別のステートメントとして使用して、これらのprint(_r)ステートメントを制御できるようにします。これはBASHの経験から来たもので、私は[[ $condition ]] && { #Do if true } || { #Do if false }
をたくさん書いていました。 BASHでは、私はそれらが短絡していることを知っていて、この事実を使って多くの単純なライナーを書きました。
今私はこの書面($verbose and print
を書く)の多くがゆっくりと私のif
のステートメントに入っているのを観察しています。私はこれがであることを承知しています。の練習ではなく、のバックで私を噛むことができます。しかし、私はそのようなライナーを書くことを楽しむようにこのスキルを習得したいと私は個人的なスタイルとしてそれを使用したいと思います。
だから私の質問(複数可)(ある)されています。短絡されるオペレータ(&&
またはand
)
- ?
- マニュアルでは
and
よりも優先すると言われていますが、短絡したオペレータの機能/機能/特性をオペレータの優先順位と混在させることで、これを例示することができます。 (基本的には優先順位と短絡の混合と一致)
オペレータの短絡と戻り値の両方の性質について丁寧に説明します。
PS:1.私は、これらの演算子の連想性は同じで直感的であることを望みますが、任意の癖を知っているなら、私に教えてください。
PS:2.そのような練習の危険に対して私に警告する気が残っている場合は、例を付けてください。
EDIT:||
でor
を置き換えることによって、私の簡単な$var = mysql_(...) or die()
コードを変更した後、私はそれが代わりにand
とor
の||
と&&
演算子を使用することができますどのように迷惑な発見。 コードは単に動作しませんでした!私の理解では、前のコンストラクトはTRUE
またはFALSE
の戻り値を$var
に割り当て、これはすべて$var
を順番に使用して警告/エラー/予期しない動作を生成します。後者のコンストラクトはmysql_(...)
の結果を最初に$var
に割り当て、次いで=
およびdie
の化合物を評価する。
これは良いレッスンです。1. PDO/mysqliを使い始めて、自分でエラーを処理してください。私はという個人的なスタイルと呼んでいます。自己への
は//注:/解釈言語別のコードを書きながら、それぞれがユニークであり、独自の癖や落とし穴を持っている、とのthatsちょうど悲しい*ため息*
[参考 - このシンボルはPHPで何を意味しますか?](http://stackoverflow.com/questions/3737139/reference-what-this-symbol-mean-in-php) – Gordon
@Gordon :_ありがとうございました。私はリストをチェックしましたが、いくつかの質問は質問の一部に答えているようです(私がすでに知っていた優先順位のようなもの)。 IMHOでは、演算子の優先順位と短絡の性質について詳しくは説明しません。 – Sudhi
例リンクのコメントの作成者は、ANDキーワードが等価の後に評価されていることを示す演算子の優先順位を示しています。それは奇妙に思えますが、いくつかのスクリプトが使用する 'mysql_connect(...)またはdie()'の行を思い出させます。 –