Tôi vừa mới đọc trang trên Expressions trong tài liệu PHP, và ngay ở đầu nó nói:Đây có phải là cách xử lý đặc biệt để thoát và chết trong tài liệu PHP không?
Cách chưa chính xác nhất đơn giản nhất để xác định một biểu thức là "bất cứ thứ gì có giá trị".
Định nghĩa đơn giản đó bao gồm tất cả các chức năng và hầu hết cấu trúc ngôn ngữ, tuy nhiên có một vài cấu trúc ngôn ngữ thể hiện rõ ràng chúng không trả về giá trị.
Dưới đây là danh sách các cấu trúc ngôn ngữ mà trả về một giá trị:
Đây là một vài thú vị mà không trả về một giá trị, và do đó không biểu:
tôi thấy die
và exit
quan tâm đặc biệt, bởi vì chúng có thể được sử dụng như là biểu thức trong PHP mặc dù không có giá trị trả về. Các dòng mã sau đây tất cả ném một lỗi cú pháp, như mong đợi:
echo 'Hi' or echo 'Bye';
if(echo('foo'))
return return(1);
$foo['bar'] = isset($foo['bar']) ? unset($foo['bar']) : 0;
if(unset($foo['bar']))
__halt_compiler() or die;
Tuy nhiên các mã PHP sau đây là hoàn toàn miễn phí các lỗi cú pháp:
print 'Hi' or print 'Bye'; // Makes sense, print returns a value
if(!die() and exit) // Wait what's happening here?
quit(die(exit(quit()))); // die and exit don't have return values (does quit?)
$x = true ? die/2 : 5*exit();
$y = pow(die,7);
isset($_GET['bar']) or die(); // This one is actually pretty commonly used.
function quit(){
return exit;
}
Tôi đã nhìn qua các tài liệu PHP và có thể không tìm thấy bất kỳ đề cập đến điều trị đặc biệt này của die() và exit(). Làm bất kỳ chuyên gia PHP biết nếu điều này là tài liệu bất cứ nơi nào. Đây có phải là hành vi dự định và là mẫu isset($_GET['bar']) or die();
an toàn để sử dụng hay không; nó đột nhiên có thể phá vỡ trong một phiên bản tương lai của PHP?
Đây không phải là vấn đề ngữ nghĩa sao? Có phải là 'die()'/'exit()' không có giá trị trả về * bởi vì chúng không bao giờ trả về *? Nó không phải là họ là * cú pháp * không biểu thức, nhưng rằng tại thời gian chạy bạn sẽ không bao giờ nhận được để xem giá trị trả lại bởi vì chương trình của bạn không bao giờ có cơ hội sử dụng nó. –
có an toàn để sử dụng không? Vâng. thành ngữ đó được rải rác khắp sách hướng dẫn trong các ví dụ. Họ không thể quay trở lại. Ngoài ra, trong danh sách nội bộ, họ luôn nói về bao nhiêu kịch bản trong tự nhiên sẽ bị phá vỡ bởi một thay đổi trước khi thực hiện nó, và điều này sẽ phá vỡ ... im đoán 1/3 của tất cả các script php? lol – goat