Ném mảng ngoại lệ mới php
Hãy nói về một cái gì đó hoàn toàn khác nhau. một phần mạnh mẽ của mã hướng đối tượng được gọi là ngoại lệ Show Trong dòng 1 - 4use Model\BrokenShip;. dòng 6 - 13$brokenShip = new BrokenShip('Tôi hỏng quá');$brokenShip->setStrength('banana');. dòng 16 - 146 Sức mạnh đó không có nghĩa lý gì. Và nếu chúng ta cố gắng chiến đấu bằng con tàu này, chúng ta sẽ gặp một số lỗi. Nhưng khi chúng ta làm mới. tốt, đó là một lỗi. nhưng không chính xác những gì tôi mong đợi Lỗi này đến từ dòng 1 - 4abstract class AbstractShip{. dòng 7 - 44hàm công khai setStrength($number){if (. is_numeric($number)) {ném Ngoại lệ mới('Đã thông qua cường độ không hợp lệ '. $number);}$this->sức mạnh = $number;}. dòng 53 - 123} Đầu tiên, chúng tôi lên kế hoạch trước. Khi chúng tôi tạo phương thức
Và thứ hai, để kích hoạt lỗi, chúng tôi đã đưa ra một ngoại lệ dòng 1 - 4abstract class AbstractShip{. dòng 7 - 44hàm công khai setStrength($number){if (. is_numeric($number)) {ném Ngoại lệ mới('Đã thông qua cường độ không hợp lệ '. $số);}. dòng 50 - 51}. dòng 53 - 123} Và đó thực sự là những gì tôi muốn nói về. Ngoại lệ là các lớp, nhưng chúng hoàn toàn đặc biệt Nhưng trước tiên, dòng 1 - 4abstract class AbstractShip{. dòng 7 - 44hàm công khai setStrength($number){if (. is_numeric($number)) {ném \Exception mới('Đã thông qua cường độ không hợp lệ '. $số);}. dòng 50 - 51}. dòng 53 - 123} Cái đó tốt hơn. Bây giờ hãy làm mới lại. Đây là một lỗi tốt hơn nhiều
Khi có sự cố xảy ra, chúng tôi đưa ra các ngoại lệ. Tại sao? . nó dừng thực thi trang và ngay lập tức hiển thị cho chúng tôi một lỗi rất hay Mẹo Nếu bạn cài đặt tiện ích mở rộng XDebug, các thông báo ngoại lệ sẽ hữu ích hơn, đẹp hơn và sẽ sửa mã cho bạn (ok, phần cuối cùng đó là nói dối) Thứ hai, ngoại lệ có thể bắt được. Đây là những gì có nghĩa là Giả sử rằng tôi muốn giết trang ngay tại đây với một lỗi. Tôi thực sự có hai lựa chọn. Tôi có thể đưa ra một ngoại lệ hoặc tôi có thể in một số thông báo lỗi và sử dụng câu lệnh Nhưng khi bạn sử dụng câu lệnh Hãy xem làm thế nào. Mở ra dòng 1 - 4 lớp PdoShipStorage triển khai Giao diện ShipStorage{. dòng 7 - 13public function fetchAllShipsData(){$statement = $this->pdo->prepare('SELECT * FROM FOOOOO');. dòng 17 - 19}. dòng 21 - 33} Điều đó rõ ràng sẽ không hoạt động. Phương thức này được gọi bởi dòng 1 - 8class ShipLoader{. dòng 11 - 20public function getShips(){. dòng 23 - 24$shipsData = $this->queryForShips();. dòng 26 - 31}. dòng 33 - 60hàm riêng queryForShips(){return $this->shipStorage->fetchAllShipsData();}} Khi chúng tôi cố gắng chạy cái này, chúng tôi nhận được một ngoại lệ
Lỗi đến từ Bây giờ, điều gì sẽ xảy ra nếu chúng ta biết rằng đôi khi, vì lý do nào đó, một ngoại lệ như thế này có thể bị ném ra khi chúng ta gọi Làm thế nào chúng ta có thể làm điều này? . Trong dòng 1 - 8class ShipLoader{. dòng 11 - 60hàm riêng queryForShips(){try {return $this->shipStorage->fetchAllShipsData();} catch (\Exception $e) {. dòng 66 - 67}}} Bây giờ, nếu phương thức dòng 1 - 8class ShipLoader{. dòng 11 - 60private function queryForShips(){try {return $this->shipStorage->fetchAllShipsData();} catch (\Exception $e) {return [];}}} Điều đó có nghĩa là, chúng ta có thể nói Và cứ như thế, trang hoạt động. Đó là sức mạnh của ngoại lệ. Khi bạn ném một ngoại lệ, bất kỳ mã nào gọi mã của bạn đều có cơ hội bắt ngoại lệ và nói
Tất nhiên, có lẽ chúng tôi cũng không muốn điều này bị lỗi một cách âm thầm mà chúng tôi không biết, vì vậy bạn có thể gây ra lỗi và in thông báo cho nhật ký của chúng tôi. Lưu ý, tóm lại, chúng ta có quyền truy cập vào đối tượng dòng 1 - 8class ShipLoader{. dòng 11 - 60private function queryForShips(){try {return $this->shipStorage->fetchAllShipsData();} catch (\Exception $e) {trigger_error('Exception. '. $e->getMessage());return [];}}} Được rồi, làm mới. Ngay bây giờ, chúng tôi thấy lỗi trên đầu trang. Nhưng đó chỉ là do cài đặt error_reporting của chúng tôi trong Làm cách nào để ném ngoại lệ tùy chỉnh trong PHP?Để tạo trình xử lý ngoại lệ tùy chỉnh, bạn phải tạo một lớp đặc biệt với các hàm có thể được gọi khi có ngoại lệ xảy ra trong PHP . Lớp phải là phần mở rộng của lớp ngoại lệ. Lớp ngoại lệ tùy chỉnh kế thừa các thuộc tính từ lớp ngoại lệ của PHP và bạn có thể thêm các chức năng tùy chỉnh vào nó.
Làm cách nào để mở rộng ngoại lệ trong PHP?Cú pháp của ngoại lệ tùy chỉnh PHP
. Với lớp CustException ở trên hiện đã được tạo, chúng ta có thể ném một ngoại lệ tùy chỉnh như bên dưới. ném \CustExcep\CustException mới('Chèn thông báo Ngoại lệ vào đây');extend another class from the Exception class which is already built in. With the above CustException class now created, we can throw a custom exception as below: throw new \CustExcep\CustException('Insert an Exception message here');
Làm thế nào bạn có thể xử lý nhiều ngoại lệ trong PHP?PHP cho phép một loạt các khối bắt sau khối thử để xử lý các trường hợp ngoại lệ khác nhau. Các khối bắt khác nhau có thể được sử dụng để xử lý các lỗi và ngoại lệ được xác định trước cũng như các ngoại lệ do người dùng xác định
Làm cách nào để xử lý lỗi nghiêm trọng trong PHP?Hàm set_error_handler() được sử dụng để cho PHP biết cách xử lý các lỗi công cụ tiêu chuẩn không phải là phiên bản của lớp ngoại lệ Lỗi. Bạn không thể sử dụng chức năng xử lý lỗi cho các lỗi nghiêm trọng. Các trường hợp ngoại lệ lỗi phải được xử lý bằng câu lệnh try/catch . set_error_handler() chấp nhận một tham số có thể gọi được. |