PHP が変数コピーのパフォーマンスを最適化するためにコピーオンライトを使用していることは誰もが知っていますが、以前の 3 項では、オペランドが大きな配列である場合、毎回コピーされていました。
$a = range(1, 1000);に短縮されました。
三項演算子は常に 2 番目または 3 番目のオペランドをコピーします。これは非常に
オペランドが配列の場合、if/else に比べて遅くなります。例:
// ここでは 0.3 秒かかります:
for ($i = 0; $i if (true) {
for ($i = 0; $i $b = true ? $a : $a;
(パッチが付いています)。
パッチなし: (数値はコードの実行にかかる時間です
回数)
$ary = array(1,2,3,4,5,6,7,8,9);
true ? 1+0 : 0 0.109
true ? $ary : 0 2.020 !
true ? $int : 0 0.103
true ? ${'ary'} : 0 2.290 !
true ?: 0 0.091
1+0 ?: 0 0.086
$ary ?: 0 2.151 !
${'var'} ?: 0 2.317 !
本当ですか? 1 : 0 0.124
true ? 1+0 : 0 0.195
true ? $ary : 0 0.103
true ? $int : 0 0.089
true ? ${'ary'} : 0 0.103
true ?: 0 0.086
1+0 ?: 0 0.159
$cv ?: 0 0.090
${'var'} ?: 0 0.089
では速度が低下します。
ケースの一部はありますが、全体としては、
のように完全に予期しないパフォーマンスの影響はありません。
現在もそうなっています。
ありがとうございます