私はPro PHP Programmingを読んでいます。例では、作者は戻り値を括弧で囲んでいます
これの違いは何ですか:
function foo($x) {
return (bar::baz($x));
}
この:
function foo($x) {
return bar::baz($x);
}
?
私はPro PHP Programmingを読んでいます。例では、作者は戻り値を括弧で囲んでいます
これの違いは何ですか:
function foo($x) {
return (bar::baz($x));
}
この:
function foo($x) {
return bar::baz($x);
}
?
他の人が述べたように、それらは機能的に同じです...ほとんど。ドキュメントに記載されているように:
注: 参照によって戻る場合は、戻り変数を括弧で囲んではなりません。これは機能しません。ステートメントの結果ではなく、参照によってのみ変数を返すことができます。return ($a); を使用する場合。変数を返すのではなく、式 ($a) の結果 (もちろん、$a の値) を返します。
PHP のマニュアルには、括弧 EDIT を避けることによる (小さな) パフォーマンス上の利点も記載されています。以下の編集のベンチマークを参照してください。
注: return は関数ではなく言語構造であるため、その引数を囲む括弧は不要であることに注意してください。それらを省略するのはよくあることですが、この場合、PHP で行う作業が少ないため、実際にはそうする必要があります。
安全を期すために、おそらく括弧を避ける価値があります。
php.net のメモをテストに入れ、PHP が括弧内の戻り値なしでどれだけ「少ない作業」を行う必要があるかを確認することにしました。答え:マイクロ最適化基準でさえ、心配する価値はありません。このテスト (v5.3) をセットアップして、2 つの同一の関数を 100,000 回ループさせます。
function test1(){
//do something
$a=1;
return $a;
}
function test2(){
//do something
$a=1;
return ($a);
}
$array = array();
for($j=0;$j<100;$j++){
$array[$j] = array();
$time = microtime(true);
$val = 0; //set a dummy variable
for($i=0;$i<100000;$i++){
$val = test1();
}
$array[$j][0] = microtime(true)-$time;
unset($i);
unset($val);
unset($time);
$time = microtime(true);
$val = 0; //set a dummy variable
for($i=0;$i<100000;$i++){
$val = test2();
}
$array[$j][1] = microtime(true)-$time;
unset($i);
unset($val);
unset($time);
}
$without_p = 0;
$with_p = 0;
foreach($array as $values){
$without_p +=$values[0];
$with_p +=$values[1];
echo $values[0].' vs '.$values[1]."\n";
}
echo "---------------\nAverages: \n".($without_p/count($array))." vs ".($with_p/count($array));
結果は次のとおりです。
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.03200101852417
0.02800178527832 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.03200101852417
0.028002023696899 vs 0.028002023696899
0.03200101852417 vs 0.02800178527832
0.032002210617065 vs 0.028000831604004
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.028000831604004 vs 0.032002210617065
0.02800178527832 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.028000831604004
0.032002210617065 vs 0.028002023696899
0.032001972198486 vs 0.028000831604004
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.028000831604004 vs 0.032002210617065
0.028002023696899 vs 0.032000780105591
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.028002023696899 vs 0.032001972198486
0.032001972198486 vs 0.03200101852417
0.032001972198486 vs 0.032001972198486
0.028002023696899 vs 0.03200101852417
0.032001972198486 vs 0.032001972198486
0.028002023696899 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.02800178527832 vs 0.032002210617065
0.028000831604004 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.03200101852417 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.028002023696899 vs 0.032001972198486
0.028000831604004 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.028000831604004
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.03200101852417 vs 0.028002023696899
0.028002023696899 vs 0.03200101852417
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.028002023696899 vs 0.032001972198486
0.028000831604004 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.032001972198486 vs 0.032001972198486
0.028001070022583 vs 0.028002023696899
0.032001972198486 vs 0.032001972198486
0.028001070022583 vs 0.028002023696899
0.032001972198486 vs 0.028000831604004
0.032002210617065 vs 0.028002023696899
0.032000780105591 vs 0.028002023696899
0.028002023696899 vs 0.03200101852417
0.028002023696899 vs 0.028002023696899
0.03200101852417 vs 0.028002023696899
0.032001972198486 vs 0.028002023696899
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.032000780105591
0.028002023696899 vs 0.028002023696899
0.03200101852417 vs 0.028002023696899
0.028002023696899 vs 0.03200101852417
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.028002023696899
0.032001972198486 vs 0.028000831604004
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.032001972198486
0.028002023696899 vs 0.028001070022583
0.032001972198486 vs 0.032001972198486
0.032001972198486 vs 0.032001972198486
0.032001972198486 vs 0.03200101852417
0.032001972198486 vs 0.028002023696899
0.032001972198486 vs 0.028001070022583
0.028002023696899 vs 0.032001972198486
0.028001070022583 vs 0.028002023696899
--------------- Averages:
0.030041754245758 vs 0.029521646499634
したがって (このテストを 100 回実行して外部効果を平滑化した後)、100,000 ループ後の総影響はわずか 0.0005 秒です。ここでの基本的な結論は、ここでのパフォーマンスの低下 (少なくとも処理時間の点では) は無視できるほど小さいということです... 100,000 回のループの後でも、バージョンの括弧は、推奨されるネイキッド リターンを使用したものよりも高速になる場合があります。
もちろん、ある時点で参照によって返そうとすることになり、エラーの原因を見つけるために何時間も費やす危険があるため、回避する価値はありますが、パフォーマンスは実際には有効な議論ではありません.
著者が使用するコーディングスタイルの規則にすぎないようです。彼はおそらく、それがより明確であり、読みやすく、初心者にとって理解しやすいと信じています. ただし、返される値には実際には影響しません。