Loại ghi đè PHP

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ọng

Trong 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
1

class 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

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ọng

Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
0
Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
2

Giao 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. 1

Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
4

Trong đ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. 1

Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
9

Vớ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
1

Trong 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ớp

Fatal 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
1

Thay đổ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
22

Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
8

Fatal 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
1

Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
2

Thay đổi liên quan

  • Công cụ sửa đổi khả năng hiển thị liên tục [_______126,
    Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
    27, v.v.] đã được giới thiệu trong PHP 7. 1
  • 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
    Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
    9
    Hành vi của cờ
    Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
    1 trên các phương thức của lớp
    Fatal 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ức
    Fatal 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ức
    Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
    9] và PHP đưa ra cảnh báo PHP.

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ọng

Fatal error: Bar::TEST cannot override final constant Foo::TEST in %s on line %d
0

Lư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.

Chủ Đề