Các ngoại lệ trong ngôn ngữ lập trình cung cấp một cách để mã ứng dụng phát sinh và xử lý các tình huống ngoại lệ và ngôn ngữ PHP không phải là ngoại lệ PHP cung cấp nhiều khả năng khác nhau để sử dụng Ngoại lệ trong mã PHP, chẳng hạn như trình xử lý ngoại lệ chung, cú pháp function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 cơ bản, cú pháp function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 xếp tầng và kết hợp, bắt ngoại lệ chỉ với loại của nó và các khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 4Trong PHP8. 0, một số hàm bên trong PHP sẽ đưa ra các ngoại lệ tiêu chuẩn function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 0 và function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1, điều đó có nghĩa là bạn sẽ thấy ngày càng nhiều ngoại lệ và cách xử lý ngoại lệ trong mã PHPBài viết này cố gắng khám phá tác động hiệu suất của việc xử lý và đưa ra các ngoại lệ trường hợp thử nghiệmLưu ý rằng các Ngoại lệ với từ khóa function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 hoặc việc sử dụng các khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 có thời gian thực hiện rất nhỏ. Rất khó có khả năng việc sử dụng Ngoại lệ là nút cổ chai của bất kỳ ứng dụng nàoĐiểm chuẩn này nhằm so sánh tác động hiệu suất tương đối của việc sử dụng Ngoại lệ và cách nó tiến triển qua các phiên bản PHP Trong điểm chuẩn, chúng ta sẽ xem xét 6 trường hợp thử nghiệm - Không
function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2. Kiểm tra mà không có bất kỳ xử lý ngoại lệ nào cả function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 9 trong khối thử. Trả về một giá trị từ bên trong khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, không có ngoại lệ. Sử dụng khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, nhưng không function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 bất kỳ Ngoại lệ nàofunction case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/nhiều function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, không có ngoại lệ. Tương tự như #3, nhưng với nhiều khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 xếp tầng- Ngoại lệ
function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2. Bắt ngoại lệ từ khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 đầu tiên function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/nhiều function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, ngoại lệ function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2. Bắt ngoại lệ từ khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 cuối cùng
1. Không function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2Đây là bài kiểm tra cơ bản mà không có khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 nào cảfunction case_return(): ?int {
return null;
}
2. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2, function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}9 trong vòng function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}1Một khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 đơn giản, nhưng trả về ngay trong khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1. Đây là trường hợp thử nghiệm đầu tiên với khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 và sẽ chỉ ra tác động hiệu suất của việc sử dụng nó, nhưng không phát hiện bất kỳ ngoại lệ nào và sẽ phản ánh đường dẫn hạnh phúc của ứng dụngfunction case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}
3. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2, không có ngoại lệMột khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, nhưng nó không có bất kỳ trường hợp ngoại lệ nào đối với function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 9 hoặc function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2. Một trường hợp thử nghiệm khác với các khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, nhưng mã tiếp tục vượt quá khối đó vì không có ngoại lệ nào được đưa rafunction case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 24. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}1/nhiều function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2, không có ngoại lệTương tự như trường hợp thử nghiệm #3, nhưng sử dụng nhiều khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 xếp tầngfunction case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 35. Ngoại lệ function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2, function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2Đây là bài kiểm tra đầu tiên mà function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 là một ngoại lệ. Điều này sẽ chỉ ra tác động hiệu suất của việc tạo đối tượng Ngoại lệ trái ngược với trường hợp #3function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 66. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}1/nhiều function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2, ngoại lệ function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
}2Một khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, nhưng ngoại lệ bị bắt ở mệnh đề function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 cuối cùng. Trường hợp thử nghiệm này là để xem liệu có bất kỳ tác động hiệu suất đáng chú ý nào khi PHP đánh giá nhiều khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 8môn thiCác phiên bản PHP sau đây đã được thử nghiệm - 8. 0 thử nghiệm 3
- 7. 4. 10
- 7. 3. 22
- 7. 2. 33
Kết quả kiểm tra7. 27. 37. 48. 01. Không function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 20. 01160. 00850. 00700. 00602. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, trả lại trong vòng function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 260. 01590. 01200. 01000. 00803. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, không có ngoại lệ0. 01920. 01610. 01240. 00854. thử/bắt nhiều lần, không có ngoại lệ0. 02010. 01500. 01250. 00815. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 ngoại lệ0. 10480. 07320. 05440. 05406. function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2, nhiều khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 20. 11020. 06800. 05610. 0550Trên đây là thời gian thực hiện trung bình từ 5 lần chạy, với mỗi trường hợp được thực hiện 100 nghìn lần. Được làm tròn đến 4 chữ số thập phân và các giá trị thô có sẵn tại đây với tối đa 12 chữ số thập phân
Phần kết luậnXuyên suốt tất cả các phiên bản PHP được thử nghiệm, bản thân các khối function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1/function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 2 có tác động hiệu suất tương đối nhỏ. Tuy nhiên, việc ném một Ngoại lệ, yêu cầu PHP thu thập dấu vết ngăn xếp và tạo một đối tượng Ngoại lệ có thể tốn kém và chậm tới 9 lầnLưu ý rằng về số lượng tuyệt đối, ném ngoại lệ một triệu lần mất 0. 5 giây, điều này cho thấy rằng chi phí hiệu suất tuyệt đối để đưa ra một ngoại lệ là khá thấp và sẽ không gây tắc nghẽn trong bất kỳ ứng dụng nào Các ngoại lệ có nghĩa là dành cho. tình huống đặc biệt. Sử dụng chúng để thay thế một chức năng ngữ nghĩa (chẳng hạn như một function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 27) có thể sai về mặt ngữ nghĩa, bởi vì một giá trị âm (chẳng hạn như function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 28) vẫn là một kết quả mong đợiTuy nhiên, sử dụng Ngoại lệ như một cách để truyền đạt các tình huống đặc biệt mà mã trong ngữ cảnh không thể xử lý, sẽ là một ứng cử viên hoàn hảo để sử dụng Ngoại lệ Trong PHP8. 0, một số chức năng nội bộ bắt đầu đưa ra Ngoại lệ, bao gồm cả ngoại lệ function case_try_successful_return(): ?int {
try {
return null;
}
catch(Exception $ex) {}
} 1 mới. Vì vậy, bạn sử dụng Ngoại lệ khi cần thiết, bởi vì mặc dù chi phí tuyệt đối để ném một ngoại lệ cao hơn, nhưng nó hầu như không tạo ra sự khác biệt trong kế hoạch lớn của mọi thứLợi ích của việc sử dụng Ngoại lệ đúng cách, chẳng hạn như trình xử lý ngoại lệ toàn cầu, khả năng tiếp tục ghi nhật ký và xử lý các ngoại lệ đã nói và kiến trúc sạch hơn trong việc xử lý đường dẫn không hài lòng vượt xa chi phí hiệu năng của Ngoại lệ
Phiên bản nào xử lý ngoại lệ được giới thiệu trong PHP 1 điểm 4 3 2 5 và các phiên bản mới hơn?
Hỗ trợ ban đầu cho việc xử lý ngoại lệ đã được đưa vào ngôn ngữ này từ phiên bản 5 , với hai lớp ngoại lệ tích hợp sẵn đơn giản – Exception và ErrorException .
Làm cách nào để tăng ngoại lệ trong PHP?
Ném một ngoại lệ chung PHP gần như đơn giản như nó có vẻ. Tất cả những gì cần làm là khởi tạo một đối tượng ngoại lệ—với tham số đầu tiên của hàm tạo Ngoại lệ là thông báo lỗi—và sau đó, "ném" nó . Điều quan trọng nhất cần lưu ý là thông điệp. |