Ngoài việc không thực hành tốt, vì @
có thể nhai các lỗi thực sự quan trọng trong ngăn xếp cuộc gọi, hình phạt hiệu suất là nhỏ.
Hãy xác minh điều này với điểm chuẩn.
<?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";
Trên máy tính không quá gần đây của tôi nó ra:
With isset: 0.295 μs
With @: 0.657 μs
ms là một phần triệu của một giây. Cả hai phương pháp đều mất gần một nửa phần triệu giây.
Người ta có thể nói, nhưng nếu tôi làm điều này cho hàng trăm hoặc hàng ngàn lần, sẽ có sự khác biệt nào không? Nếu bạn phải làm !isset()
một triệu lần, thì chương trình của bạn đã dành khoảng 0,3 giây để làm điều này! Có nghĩa là bạn không nên làm điều đó ngay từ đầu.
Tuy nhiên, @
là một thực hành không tốt cho bất kỳ điều gì phức tạp hơn một mảng đơn giản, do đó không sử dụng nó ngay cả khi bạn biết rằng sự khác biệt hiệu suất là không đáng kể.
EDIT: Đã thêm dấu ngoặc đơn đóng vào lệnh 'isset()'. –