これは一種の一般的な質問ですが、それを説明するために具体的な例を使用します。
ドキュメントをロードする関数があります。そのドキュメントが存在しない場合は作成し、存在する場合は JSON 配列に変換します。json_decode()
問題があるかどうか、またはファイルが存在しないかどうかにかかわらず、この関数が何らかの配列を返すことを常に望んでいます。現在、私はそのようにやっています...
function load($file) {
if( ! file_exists($file)) {
$handle = fopen($file, 'w');
fclose($handle);
}
$raw = file_get_contents($file);
$contents = json_decode($raw, TRUE);
return( ! $contents ? array() : $contents);
//cant use ternary shorthand "?:" in PHP 5.2, otherwise this would be shorter
}
さて、上記のコードには何も問題はありません (少なくとも、問題はないと思いますし、問題なく動作します)。しかし、私はコードを改善し、完全に読みやすく保ちながらコードを凝縮する方法を常に探しています。そして、その return ステートメントは、非効率に見えるので、いつも私を悩ませてきました。それで今日、私は考え始めました、そして何かが私に起こりました。効果のあることをするmysqlチュートリアルを見たのを覚えているconnect() or die();
ので、なぜだと思いましたjson_decode() or array();
か? これでも機能しますか?だから私は自分の関数を書き直して調べました...
function load($file) {
if( ! file_exists($file)) {
$handle = fopen($file, 'w');
fclose($handle);
}
$raw = file_get_contents($file);
return json_decode($raw, TRUE) or array();
}
そのようで、それは十分に楽しく読むことさえできます。それでは、次の一連の質問に進みます。これは良い習慣ですか?私はそれを理解していますが、他の人はどうですか?それは本当に機能しますか、それともこれはハッピーエンドのバグですか? 調べてみると、私が求めているのは短絡評価と呼ばれるものであり、バグではないことがわかりました。知ってよかったです。私はその新しい用語を使用して検索を絞り込み、さらにいくつかの資料を思いつきました.
常に MySQL 接続を参照することについて、私が調べている方法でショートサーキットを使用することについて話しているものはほとんどありませんでした。さて、ほとんどの人がこの用語の使用に反対していることは知っていor die()
ますが、それはエラーに対処する方法が洗練されていないためです。を使用しようとしていないため、これは私が求めている方法の問題ではありませんor die()
。これを使用しない他の理由はありますか?ウィキペディアはそう考えているようですが、C に関してのみです。私は PHP が C で書かれていることを知っているので、それは間違いなく適切な情報です。しかし、この問題は PHP のコンパイルで取り除かれましたか? そうでない場合、それはウィキペディアがそうであるように悪いことですか?
これがウィキペディアのスニペットです。
ウィキペディア- 「短絡は、最新のプロセッサの分岐予測でエラーにつながる可能性があり、パフォーマンスを劇的に低下させる可能性があります (注目すべき例は、レイ トレーシングの軸整列ボックス交差コードを使用した高度に最適化されたレイです) [明確化が必要]。一部のコンパイラはそのようなケースを検出できます。より高速なコードを生成しますが、C 標準に違反する可能性があるため、常に可能であるとは限りません。高度に最適化されたコードは、これを行うために他の方法を使用する必要があります (アセンブリ コードの手動使用など)"
皆さんはどう思いますか?
編集
別のフォーラムを調査したところ、いくつかの良い結果が得られました。一般的なコンセンサスは、この形式の変数割り当ては有効ではあるものの、好まれておらず、現実の世界では悪い形式と見なされることさえあるということです。私は引き続き耳を傾け、何か新しいことがあれば更新します。コービンとマット、特にいくつかのことを片付けてくれたコービンに感謝します。興味のある方は、フォーラムの投稿へのリンクを次に示します。