Если у вас PHP 5.3, это быстрее:
$a = $b * $c ?: 0;
Это то же самое, что и $a = $b * $c ? $b * $c : 0;
, но вычисление $a*$b
выполняется только один раз. Кроме того, он не выполняет дополнительных заданий, как в вашем втором решении.
Используя тестовый скрипт Martin v. Löwis, я получаю следующее время:
$a = $b * $c ?: 0; 1.07s
$a = $b * $c ? $b * $c : 0; 1.16s
$i = $b * $c; $a = $i ? $i : 0; 1.39s
Теперь это микрооптимизации, поэтому, возможно, есть много способов оптимизировать ваш код, прежде чем делать это:)
Если это не так, вы также можете сравнить сгенерированные PHP OP-коды:
1 $a = $b * $c ? $b * $c : 0;
:
number of ops: 8
compiled vars: !0 = $a, !1 = $b, !2 = $c
line # op fetch ext return operands
-------------------------------------------------------------------------------
1 0 MUL ~0 !1($b), !2($c)
1 JMPZ ~0, ->5
2 MUL ~1 !1($b), !2($c)
3 QM_ASSIGN ~2 ~1
4 JMP ->6
5 QM_ASSIGN ~2 0
6 ASSIGN !0($a), ~2
7 RETURN null
2 $i = $b * $c; $a = $i ? $i : 0;
number of ops: 8
compiled vars: !0 = $i, !1 = $b, !2 = $c, !3 = $a
line # op fetch ext return operands
-------------------------------------------------------------------------------
1 0 MUL ~0 !1($b), !2($c)
1 ASSIGN !0($i), ~0
2 JMPZ !0($i), ->5
3 QM_ASSIGN ~2 !0($i)
4 JMP ->6
5 QM_ASSIGN ~2 0
6 ASSIGN !3($a), ~2
7 RETURN null
3 $a = $b * $c ?: 0;
:
number of ops: 5
compiled vars: !0 = $a, !1 = $b, !2 = $c
line # op fetch ext return operands
-------------------------------------------------------------------------------
1 0 MUL ~0 !1($b), !2($c)
1 ZEND_JMP_SET ~1 ~0
2 QM_ASSIGN ~1 0
3 ASSIGN !0($a), ~1
4 RETURN null
Эти списки кодов OP были созданы расширением VLD .