or return
PHPで実行できないとは知らなかったので、この質問をしてくれてありがとう。私がそれをテストしたとき、私はあなたと同じくらい驚いた. この質問は、私が PHP の内部について調べたり、いじったりするいいきっかけになりました。ただし、私は PHP の内部構造の専門家ではないので、以下は PHP の内部構造に関する素人の見解ですが、かなり正確だと思います。
or return
return
言語パーサーによって「式」と見なされないため、機能しません-それは簡単です。
キーワードor
は PHP 言語で と呼ばれるトークンとして定義されており、T_LOGICAL_OR
それが定義されているように見える唯一の式は次のようになります。
expr T_LOGICAL_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
中括弧内のビットについて心配する必要はありません。これは、実際の「または」ロジックの処理方法を定義するだけです。残っているのは です。これは、式の後にトークンが続き、別の式がexpr T_LOGICAL_OR expr
続くことが有効な式であることを示しているだけです。T_LOGICAL_OR
ご想像のとおり、 anexpr
もパーサーによって定義されます。r_variable
読み取りが許可されている変数であることを意味する 、またはexpr_without_variable
式が他の式から作成できることを示す派手な方法である のいずれかです。
or die()
言語構造(関数ではありませdie
ん!) とそのエイリアスは両方とも tokenでexit
表され、有効と見なされますが、ステートメント - token - はそうではありません。T_EXIT
T_EXIT
expr_without_variable
return
T_RETURN
では、なぜT_EXIT
式と見なされるのにそうT_RETURN
ではないのでしょうか。正直なところ、私には手がかりがありません。or die()
おそらく、あなたが求めている構造を許可するためだけに行われた設計上の選択でした. これが非常に広く使用されていたという事実 (少なくともチュートリアルなどでは、大量の製品コードについて話すことができないため) は、これが意図的な選択であった可能性があることを暗示しているようです。確実に知るには、言語開発者に尋ねる必要があります。
とはいえ、これは問題ではありません。このor die()
構文は、数年前のチュートリアル (上記参照) ではどこにでもあるように見えましたが、「賢いコード」の例であるため、実際には推奨されていません。or die()
は独自の構造ではなく、or
演算子の 2 つの副作用 (乱用と言う人もいるかもしれません) を使用するトリックです。
- 演算子の優先順位リストでは非常に低いため、実際には他のすべての式が評価される前に評価されます。
- これは短絡演算子です。つまり、最初のオペランドが を返した場合、2 番目のオペランド ( の後のビット)
or
は実行されませTRUE
ん。TRUE
or
一部の人々は、この種の策略を好ましくないと考えています。なぜなら、プログラマーが読むのは難しくなりますが、ソース コード内の数文字のスペースしか節約できないからです。プログラマーの時間は高く、ディスク容量は安いので、人々がこれを好まない理由がわかります。
代わりに、コードを本格的なif
ステートメントに展開して、意図を明示する必要があります。
$handle = fopen($location, "r");
if ($handle) {
// process the file
} else {
return 0;
}
if
ステートメント内で変数の割り当てを行うこともできます。これをまだ読めない人もいますが、ほとんどの人 (私自身を含む) は同意しません。
if ($handle = fopen($location, "r")) {
// process the file
} else {
return 0;
}
最後に 1 つ: ステータス コードとして返された場合は成功を示すのが慣習である0
ため、ファイルを開くことができなかったことを示すために別の値を返したい場合があります。