Помимо хорошей практики, поскольку @
может пережевывать действительно важные ошибки в стеке вызовов, штраф за исполнение минимален.
Давайте проверим это с помощью эталона.
<?php
error_reporting(-1);
$limit = 10000;
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
echo !isset($_GET['aaa']) ? '' : $_GET['aaa'];
}
$total = 1000000 * (microtime(true) - $start)/$limit;
echo "With isset: $total μs\n";
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
echo @$_GET['aaa'];
}
$total = 1000000 * (microtime(true) - $start)/$limit;
echo "With @: $total μs\n";
На моем не так недавнему компьютер выводит:
With isset: 0.295 μs
With @: 0.657 μs
мкс является миллионной секунды. Оба метода занимают около половины миллионной доли секунды.
Можно сказать, но что, если я сделаю это в течение сотен или тысяч раз, будет ли какая-то разница? Если вам нужно сделать !isset()
миллион раз, то ваша программа уже потратила около 0,3 секунды, делая это! Это означает, что вы не должны были этого делать в первую очередь.
Тем не менее, @
- это плохая практика для чего-либо более сложного, чем простой массив, поэтому не использовать его, даже если вы знаете, что разница в производительности незначительна.
EDIT: Добавлена закрывающая скобка для вызова 'isset()'. –