Hướng dẫn what is throwable php? - php có thể ném là gì?

Thay đổi ngôn ngữ:

Gửi báo cáo yêu cầu kéo một lỗi

(Php 7, Php 8)

Giới thiệu

Có thể ném là giao diện cơ sở cho bất kỳ đối tượng nào có thể được ném thông qua câu lệnh

echo 'XuanthuLab'
2, bao gồm lỗi và ngoại lệ. is the base interface for any object that can be thrown via a
echo 'XuanthuLab'
2 statement, including Error and Exception.

Ghi chú::

Các lớp PHP không thể triển khai giao diện có thể ném trực tiếp và thay vào đó phải mở rộng ngoại lệ.Throwable interface directly, and must instead extend Exception.

Bản tóm tắt giao diện

InterfacethRowableExtends Stringable { Throwable extends Stringable {

/ * Phương pháp */

publicGetMessage (): Chuỗi getMessage(): string

publicGetCode (): int getCode(): int

publicGetFile (): Chuỗi getFile(): string

publicGetLine (): int getLine(): int

publicGetTrace (): mảng getTrace(): array

publicGetTraceAsString (): Chuỗi getTraceAsString(): string

publicGetPrevious ():? Khả năng ném getPrevious(): ?Throwable

Tóm tắtPublic__ToString (): Chuỗi public __toString(): string

/ * Phương pháp kế thừa */

PublicsTringable :: __ toString (): Chuỗi Stringable::__toString(): string

}

Thay đổi

Phiên bảnSự mô tả
8.0.0 Khả năng ném có thể thực hiện được ngay bây giờ. implements Stringable now.

Mục lục

  • Có thể ném :: getmessage - nhận tin nhắn
  • Có thể ném :: GetCode - Nhận mã ngoại lệ
  • Có thể ném :: getfile - Nhận tệp trong đó đối tượng được tạo
  • Có thể ném :: getline - có được dòng mà đối tượng được khởi tạo
  • Khả năng ném :: GetTrace - Nhận dấu vết ngăn xếp
  • Có thể ném :: GetTraceAsString - Nhận dấu vết ngăn xếp như một chuỗi
  • Throwable :: GetPrevious - Trả lại những cú ném trước đó
  • Khả năng ném :: __ TOSTRING - Nhận một biểu diễn chuỗi của đối tượng ném

+ Thêm một ghi chú

Người dùng đóng góp ghi chú 2 ghi chú

lên

xuống

83

mlocati tại gmail dot com

5 năm trước

echo 'XuanthuLab'
3

echo 'XuanthuLab'
4

echo 'XuanthuLab'
5

echo 'XuanthuLab'
6

lên

xuống

5

mlocati tại gmail dot com

5 năm trước

echo 'XuanthuLab'
7

echo 'XuanthuLab'
8

echo 'XuanthuLab'
9

; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
0

echo 'XuanthuLab'
6

+ Thêm một ghi chú

  • Vấn đề về các lỗi trong PHP
  • Hàm error_reporting() trong PHP
  • Hàm trigger_error() trong PHP
  • Hàm set_error_handler() trong PHP
  • Ngoại lệ - Exception trong PHP
  • throw Exception - phát sinh ngoại lệ
  • Bắt ngoại lệ - try catch trong PHP
  • Tạo ngoại lệ riêng PHP
  • Hàm set_exception_handler trong PHP

Tổng quan về các lỗi trong PHP

Trong quá trình ứng dụng PHP (Website PHP) hoạt động, có thể có lỗi xảy ra, có những lỗi cảnh báo nhưng Script PHP vẫn chạy, có những lỗi làm cho chương trình kết thúc ngay lập tức, có những lỗi do bản thân hệ thống, có những lỗi do logic chương trình có vấn đề. Trong PHP các lỗi được phân ra thành các nhóm (loại): Mỗi nhóm biểu diễn bởi một giá trị và được định nghĩa bởi một hằng số trong PHP

Nội dung chính

  • Tổng quan về các lỗi trong PHP
  • Trong quá trình ứng dụng PHP (Website PHP) hoạt động, có thể có lỗi xảy ra, có những lỗi cảnh báo nhưng Script PHP vẫn chạy, có những lỗi làm cho chương trình kết thúc ngay lập tức, có những lỗi do bản thân hệ thống, có những lỗi do logic chương trình có vấn đề. Trong PHP các lỗi được phân ra thành các nhóm (loại): Mỗi nhóm biểu diễn bởi một giá trị và được định nghĩa bởi một hằng số trong PHP
  • Nội dung chính
  • Thiết lập các thông báo lỗi error_reporting() trong PHP
  • Hàm trigger_error trong PHP, phát sinh thông báo lỗi
  • Hàm set_error_handler trong PHP, đăng ký error_handler
  • throw và lớp Exception trong PHP
  • Sử dụng try ... catch ... để bắt ngoại lệ

Tạo ngoại lệ riêng - tùy biến trong PHP
Thiết lập exception_handler bắt ngoại lệ bị bỏ qua bởi try ... catch... Bảng danh sách phân loại các lỗi, cảnh báo trong PHPGiá trị
1
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2
Tên hằng số lỗi
2
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
3
Mô tả
4
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
4
Lỗi nghiêm trọng (Fatal Error) script bị kết thúc, lỗi xảy ra như tràn bộ nhớ ... Ví dụ, bạn gọi một hàm không tồn tại.
hamnaykhongtontai();
echo xuất ra một chuỗi, mà thiếu dấu ; ở cuối.
echo 'XuanthuLab'
8
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
5
Cảnh báo khi thực thi. Lỗi này không dẫn đến script bị dừng. Ví dụ, nạp một mã nguồn php bằng include, trong khi file đó không tồn tại:
include ("file-ma-nguon-nay-khong-co.php");
16
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
6
Lỗi phát sinh do trình parser (phân tích cú pháp) - nó cũng kết thúc script, ví dụ bạn viết echo xuất ra một chuỗi, mà thiếu dấu ; ở cuối.
echo 'XuanthuLab'
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2
do nhân PHP phát sinh
32
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
8
Cánh báo cho biết có thể có lỗi, vì PHP không chắc chắn đó là lỗi hay không.
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
3
do nhân PHP phát sinh.
64
; Thiết lập chỉ hiện thị lỗi E_DEPRECATED và E_STRICT
; Môi trường Product nên thiết lập
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
0
Giống
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2 do nhân PHP phát sinh
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2
phát sinh bởi Zend Scripting Engine.
128
; Thiết lập chỉ hiện thị lỗi E_DEPRECATED và E_STRICT
; Môi trường Product nên thiết lập
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
2
Giống
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
3 do nhân PHP phát sinh.
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
3
, phát sinh bởi Zend Scripting Engine.
256
; Thiết lập chỉ hiện thị lỗi E_DEPRECATED và E_STRICT
; Môi trường Product nên thiết lập
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
4
Giống
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2 phát sinh bởi Zend Scripting Engine.
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2
, do code của bạn tự phát sinh bằng cách gọi hàm trigger_error()
512
; Thiết lập chỉ hiện thị lỗi E_DEPRECATED và E_STRICT
; Môi trường Product nên thiết lập
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
6
Giống
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
3, phát sinh bởi Zend Scripting Engine.
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
3
, do code của bạn tự phát sinh bằng cách gọi hàm trigger_error()
1024
; Thiết lập chỉ hiện thị lỗi E_DEPRECATED và E_STRICT
; Môi trường Product nên thiết lập
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
8
Giống
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2, do code của bạn tự phát sinh bằng cách gọi hàm trigger_error()
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
5
, do code của bạn tự phát sinh bằng cách gọi hàm trigger_error()
2048
// Hiện thị tất cả các lỗi
error_reporting(E_ALL);
// Hoặc E_DEPRECATED và E_STRICT
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)
0
Giống
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
3, do code của bạn tự phát sinh bằng cách gọi hàm trigger_error()
4096
// Hiện thị tất cả các lỗi
error_reporting(E_ALL);
// Hoặc E_DEPRECATED và E_STRICT
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)
1
Giống
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
5, do code của bạn tự phát sinh bằng cách gọi hàm trigger_error()
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2
.
8192
// Hiện thị tất cả các lỗi
error_reporting(E_ALL);
// Hoặc E_DEPRECATED và E_STRICT
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)
3
Gợi ý của PHP để code của bạn tương thích được cho các bản tiếp theo. Có thể là lỗi nghiêm trọng, nếu không bắt lại bởi error_hander thì script dừng với lỗi
; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
2.
16384
// Hiện thị tất cả các lỗi
error_reporting(E_ALL);
// Hoặc E_DEPRECATED và E_STRICT
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)
4
Thông báo - code của bạn có thể không hoạt động cho phiên bản tiếp theo của PHP
// Hiện thị tất cả các lỗi
error_reporting(E_ALL);
// Hoặc E_DEPRECATED và E_STRICT
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)
3
32767
// Hiện thị tất cả các lỗi
error_reporting(E_ALL);
// Hoặc E_DEPRECATED và E_STRICT
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)
6
 

Trong quá trình ứng dụng PHP (Website PHP) hoạt động, có thể có lỗi xảy ra, có những lỗi cảnh báo nhưng Script PHP vẫn chạy, có những lỗi làm cho chương trình kết thúc ngay lập tức, có những lỗi do bản thân hệ thống, có những lỗi do logic chương trình có vấn đề. Trong PHP các lỗi được phân ra thành các nhóm (loại): Mỗi nhóm biểu diễn bởi một giá trị và được định nghĩa bởi một hằng số trong PHP

Nội dung chính

Thiết lập các thông báo lỗi error_reporting() trong PHP

Hàm trigger_error trong PHP, phát sinh thông báo lỗi

Hàm set_error_handler trong PHP, đăng ký error_handler

; Bật hiện thị các thông báo lỗi
display_errors = On
; Thiết lập các lỗi hiện thị - tất cả các lỗi
; Môi trường phát triển nên thiết lập
error_reporting = E_ALL
; Thiết lập chỉ hiện thị lỗi E_DEPRECATED và E_STRICT
; Môi trường Product nên thiết lập
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

throw và lớp Exception trong PHP

Sử dụng try ... catch ... để bắt ngoại lệ

Tạo ngoại lệ riêng - tùy biến trong PHP error_reporting() để thiết lập các loại lỗi có thể hiện thị

// Hiện thị tất cả các lỗi
error_reporting(E_ALL);
// Hoặc E_DEPRECATED và E_STRICT
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)

Thiết lập exception_handler bắt ngoại lệ bị bỏ qua bởi try ... catch...

// Hiện thị E_DEPRECATED và E_STRICT
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);

Nội dung chính

Thiết lập các thông báo lỗi error_reporting() trong PHP

trigger_error($mgs, $error_level);
  • Hàm trigger_error trong PHP, phát sinh thông báo lỗi
  • Hàm set_error_handler trong PHP, đăng ký error_handlerE_USER_ERROR, E_USER_WARNING, E_USER_NOTICE. Không thiết lập mặc định là E_USER_NOTICE

throw và lớp Exception trong PHP

Thiết lập các thông báo lỗi error_reporting() trong PHP

Hàm trigger_error trong PHP, phát sinh thông báo lỗiE_USER_*, E_WARNING, E_NOTICE ...

Đầu tiên bạn cần xây dựng một hàm callback có các tham số:

// $errno : mã lỗi nhận được
// $errstr: chuỗi thông báo lỗi
// $errfile: file xảy ra lỗi
// $errline: dòng có lỗi
// $errcontext: mảng các biến tại thời điểm lỗi
handler($errno, $errstr, $errfile = null, $errline = null, $errcontext = null) : bool

Ví dụ xây dựng một hàm callback như sau:

include ("file-ma-nguon-nay-khong-co.php");
0

Để thiết lập nó là error handler, gọi hàm sau để đăng ký:

include ("file-ma-nguon-nay-khong-co.php");
1

Bạn cũng có thể dùng hàm vô danh làm handler, ví dụ:

include ("file-ma-nguon-nay-khong-co.php");
2

Sau khi đăng ký hàm error-handler mới, nếu muốn quay về trạng thái trước thì dùng hàm restore_error_handler(), hoặc set_error_handler(null) để hủy không sử dụng error handler.restore_error_handler(), hoặc set_error_handler(null) để hủy không sử dụng error handler.

throw và lớp Exception trong PHP

Ngoại lệ là đối tượng chứa thông tin lỗi được phát sinh, bạn có thể tạo ra các ngoại lệ bằng cách tạo đối tượng mới từ bất kỳ lớp nào triển khai từ giao diện Throwable của PHP. Như các lớp

// Hiện thị E_DEPRECATED và E_STRICT
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
0,
// Hiện thị E_DEPRECATED và E_STRICT
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
1,
// Hiện thị E_DEPRECATED và E_STRICT
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
2,
// Hiện thị E_DEPRECATED và E_STRICT
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
3,
// Hiện thị E_DEPRECATED và E_STRICT
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
4 ...

Khi có một ngoại lệ, giả sử là đối tượng

// Hiện thị E_DEPRECATED và E_STRICT
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
5, thì trong code bạn có thể phát - lan truyền ngoại lệ đó bằng từ khóa
echo 'XuanthuLab'
2.

include ("file-ma-nguon-nay-khong-co.php");
3

Khi code thi hành gặp lệnh

echo 'XuanthuLab'
2 thì khối code đó sẽ dừng tại
echo 'XuanthuLab'
2

Ví dụ:

include ("file-ma-nguon-nay-khong-co.php");
4

Giờ bạn sử dụng hàm, trường hợp này sẽ phát sinh ngoại lệ:

include ("file-ma-nguon-nay-khong-co.php");
5

Khi gọi chia_lay_du() mà nó có quăng (phát ra) ngoại lệ, nếu tại đó bạn không bắt ngoại lệ lại để xử lý thì mặc định sẽ phát sinh lỗi Fatal error, và toàn bộ chương trình kết thúc tại điểm phát sinh ngoại lệ.

Sử dụng try ... catch ... để bắt ngoại lệ

Hiển nhiên, bạn muốn bắt lại ngoại lệ để điều hướng chương trình theo phương án tốt nhất. Lúc đó bạn sẽ sử dụng cú pháp try ... catch ... try ... catch ...

Cú pháp cơ bản như sau:

include ("file-ma-nguon-nay-khong-co.php");
6

Ví dụ:

include ("file-ma-nguon-nay-khong-co.php");
7

Giờ bạn sử dụng hàm, trường hợp này sẽ phát sinh ngoại lệ:

Khi gọi chia_lay_du() mà nó có quăng (phát ra) ngoại lệ, nếu tại đó bạn không bắt ngoại lệ lại để xử lý thì mặc định sẽ phát sinh lỗi Fatal error, và toàn bộ chương trình kết thúc tại điểm phát sinh ngoại lệ.

Sử dụng try ... catch ... để bắt ngoại lệ

include ("file-ma-nguon-nay-khong-co.php");
8

Hiển nhiên, bạn muốn bắt lại ngoại lệ để điều hướng chương trình theo phương án tốt nhất. Lúc đó bạn sẽ sử dụng cú pháp try ... catch ...

Cú pháp cơ bản như sau:

include ("file-ma-nguon-nay-khong-co.php");
9

Như vậy, khi có ngoại lệ, bạn đã điều hướng được chương trình bằng cách xử lý ngoại lệ đó, chứ không bị kết thúc đột ngột tại nơi phát sinh ngoại lệ.

Nhiều khối catch

echo 'XuanthuLab'
0

Bạn có thể sử dụng nhiều khối // Hiện thị E_DEPRECATED và E_STRICT ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT); 9 liên tiếp nhau để bắt các ngoại lệ phù hợp:

Thêm vào finally

echo 'XuanthuLab'
1

Trong cú pháp

trigger_error($mgs, $error_level);
0 bạn cũng có thể tạo ra một khối ở cuối cùng có tên là
trigger_error($mgs, $error_level);
1, các code trong khối này luôn được thi hành dù có phát sinh ngoại lệ hay không.