Các hằng được khai báo trên các lớp PHP có thể bị ghi đè bởi các lớp con. Trước PHP 8. 1, cờ
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 không được phép trên các hằng số của lớp, điều này sẽ bảo vệ các hằng số của lớp không bị ghi đè bởi các lớp con. Cố gắng sử dụng cờ Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 trên hằng số lớp dẫn đến lỗi nghiêm trọngTrong PHP8. 1 trở lên, cờ
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 được phép trên các hằng số lớp/giao diện và không có lớp con nào được phép mở rộng/ghi đè hằng số Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1class Foo {
final public const TEST = '1';
}
class Bar extends Foo {
public const TEST = '2';
}
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
7
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
Không được phép thêm cờ
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 vào hằng số Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
9 vì không thể truy cập hằng số/phương thức/thuộc tính Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
9 bên ngoài chính lớp đóKhai báo hằng số
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
01 dẫn đến lỗi nghiêm trọngFatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
0Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
2Giao diện thay đổi liên tục
Trước PHP 8. 1, ghi đè hằng số
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
02 không được phép và dẫn đến lỗi nghiêm trọng. Hành vi này đã thay đổi trong PHP 8. 1Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
4Trong đoạn mã trên, hằng số
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
03 bị ghi đè bởi lớp Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
04. Mặc dù hằng số Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
03 không được khai báo là Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1, điều này không được phép trước PHP 8. 1Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
9Với việc giới thiệu các hằng số
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 trong PHP 8. 1, các lớp và giao diện được phép ghi đè lên lớp đã khai báo trước đó, trừ khi hằng số được khai báo bằng cờ Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1Trong PHP8. 1, Các hằng số của giao diện cũng hỗ trợ cờ
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 và việc cố gắng ghi đè sẽ dẫn đến lỗi, giống như khi ghi đè một hằng số lớpFatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
3____24Điều tương tự cũng áp dụng khi một Giao diện mở rộng một Giao diện khác và ghi đè hằng số
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1Thay đổi API phản chiếu
Lớp
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
21 từ Reflection API có một phương thức mới Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
22Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
8Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
23 trả về giá trị Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
24 cho dù hằng số lớp đã cho có được khai báo Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
2Thay đổi liên quan
- Công cụ sửa đổi khả năng hiển thị liên tục [_______126,
27, v.v.] đã được giới thiệu trong PHP 7. 1Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
- PHP 8. 0. Quy tắc kế thừa không được áp dụng cho các phương thức của lớp
9Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
Hành vi của cờ
1 trên các phương thức của lớpFatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
9 đã thay đổi trong PHP 8. 0. Trước PHP 8. 0, ghi đè phương thứcFatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
01 không được phép và dẫn đến lỗi nghiêm trọng. Từ PHP8. 0 trở lên, điều này được cho phép [nhưng chỉ đối với các phương thứcFatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
9] và PHP đưa ra cảnh báo PHP.Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
Tác động tương thích ngược
Đây là thay đổi ở cấp độ ngôn ngữ, không thể chuyển tính năng này sang các phiên bản PHP cũ hơn. Sử dụng cờ
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 trên các phiên bản PHP cũ hơn 8. 1 gây ra lỗi nghiêm trọngFatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
0Lưu ý rằng hành vi của Giao diện đã thay đổi; . 1 trở lên cho phép khai báo lại hằng số Giao diện không phải là cuối cùng. Mã hiện có dựa trên hành vi này và giả định rằng hằng số Giao diện sẽ không bao giờ bị ghi đè có thể cần thêm cờ
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
1 vào hằng số Giao diện để đảm bảo nó không bị ghi đè trong PHP 8. 1 và các phiên bản mới hơn
Làm cách nào tôi có thể ghi đè lên trong PHP?
Trong ghi đè hàm, cả lớp cha và lớp con phải có cùng tên hàm và số đối số . Nó được sử dụng để thay thế phương thức cha trong lớp con. Mục đích của việc ghi đè là thay đổi hành vi của phương thức lớp cha. Hai phương thức có cùng tên và cùng tham số được gọi là ghi đè.
Làm cách nào chúng ta có thể ngừng ghi đè trong PHP?
Tránh ghi đè phương thức
. using the keyword final infront of the method name prevents it from being overriden.