PHP thực hiện một tính năng gọi là các ràng buộc tĩnh muộn có thể được sử dụng để tham chiếu lớp được gọi trong bối cảnh kế thừa tĩnh.
Chính xác hơn, các ràng buộc tĩnh muộn hoạt động bằng cách lưu trữ lớp có tên trong "cuộc gọi không chuyển tiếp cuối cùng". Trong trường hợp các cuộc gọi phương thức tĩnh, đây là lớp được đặt tên rõ ràng [thường là phương thức bên trái của toán tử ::
]; Trong trường hợp các cuộc gọi phương thức không tĩnh, nó là lớp của đối tượng. Một "cuộc gọi chuyển tiếp" là một cuộc gọi tĩnh được giới thiệu bởi self::
, parent::
, static::
hoặc, nếu đi lên trong hệ thống phân cấp lớp, forward_static_call []. Hàm get_called_class [] có thể được sử dụng để truy xuất một chuỗi có tên của lớp được gọi và static::
giới thiệu phạm vi của nó.forward_static_call[]. The function
get_called_class[] can be used to retrieve a string with the name of the called class and static::
introduces its scope.
Tính năng này được đặt tên là "ràng buộc tĩnh muộn" với một quan điểm nội bộ trong tâm trí. "Binding muộn" xuất phát từ thực tế là static::
sẽ không được giải quyết bằng cách sử dụng lớp nơi phương thức được xác định nhưng nó sẽ được tính toán bằng cách sử dụng thông tin thời gian chạy. Nó cũng được gọi là "liên kết tĩnh" vì nó có thể được sử dụng cho [nhưng không giới hạn ở] các cuộc gọi phương thức tĩnh.
Hạn chế của self::
Các tài liệu tham khảo tĩnh cho lớp hiện tại như self::
hoặc __CLASS__
được giải quyết bằng cách sử dụng lớp trong đó hàm thuộc, như ở nơi nó được xác định:
Ví dụ #1 self::
sử dụng
::
1
::
2
::
3Ví dụ trên sẽ xuất ra:
Việc sử dụng các ràng buộc tĩnh muộn
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
Ví dụ #2 static::
Sử dụng đơn giản
::
8
::
2
::
3Ví dụ trên sẽ xuất ra:
Việc sử dụng các ràng buộc tĩnh muộn:
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu
::
4 từ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng::
6 đã được bảo lưu.
Ví dụ #2 static::
Sử dụng đơn giản
self::
5
::
2
self::
7Ví dụ trên sẽ xuất ra:
success! success! success! Fatal error: Call to private method C::foo[] from context 'A' in /tmp/test.php on line 9
Việc sử dụng các ràng buộc tĩnh muộn:
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu
::
4 từ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng::
6 đã được bảo lưu.Ví dụ #2
static::
Sử dụng đơn giản
parent::
0
parent::
1parent::
2Ví dụ trên sẽ xuất ra:
Việc sử dụng các ràng buộc tĩnh muộn ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
parent::
3
parent::
4
parent::
5
parent::
6 Ví dụ #2 static::
Sử dụng đơn giản ¶
Ghi chú:
parent::
7
parent::
8
parent::
9
Trong các bối cảnh không tĩnh, lớp được gọi sẽ là lớp của thể hiện đối tượng. Vì self::
1 sẽ cố gắng gọi các phương thức riêng tư từ cùng một phạm vi, sử dụng static::
có thể cho kết quả khác nhau. Một điểm khác biệt khác là static::
chỉ có thể đề cập đến các thuộc tính tĩnh. ¶
Ví dụ #3 static::
Sử dụng trong bối cảnh không tĩnh
static::
0
static::
1
static::
2
static::
3 Độ phân giải của các ràng buộc tĩnh muộn sẽ dừng lại ở một cuộc gọi tĩnh được giải quyết hoàn toàn mà không dự phòng. Mặt khác, các cuộc gọi tĩnh bằng các từ khóa như parent::
hoặc self::
sẽ chuyển tiếp thông tin gọi. ¶
Ví dụ #4 Các cuộc gọi chuyển tiếp và không chuyển tiếp
static::
4
static::
5
static::
6
static::
7
static::
8Sergei tại 2440Media dot com ¶ ¶
14 năm trước
static::
9
static::
0
static::
2
static::
2MHH2422 tại hotmail dot com ¶
Ghi chú:
static::
3
static::
4
static::
5
static::
6 Trong các bối cảnh không tĩnh, lớp được gọi sẽ là lớp của thể hiện đối tượng. Vì self::
1 sẽ cố gắng gọi các phương thức riêng tư từ cùng một phạm vi, sử dụng static::
có thể cho kết quả khác nhau. Một điểm khác biệt khác là static::
chỉ có thể đề cập đến các thuộc tính tĩnh. ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
static::
7
static::
8
static::
9
static::
0
static::
8 Ví dụ #2 static::
Sử dụng đơn giản ¶
Ghi chú:
static::
2
static::
3
static::
4
static::
5
static::
6
static::
7
static::
8 Trong các bối cảnh không tĩnh, lớp được gọi sẽ là lớp của thể hiện đối tượng. Vì self::
1 sẽ cố gắng gọi các phương thức riêng tư từ cùng một phạm vi, sử dụng static::
có thể cho kết quả khác nhau. Một điểm khác biệt khác là static::
chỉ có thể đề cập đến các thuộc tính tĩnh. ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
static::
9
self::
0
static::
2
self::
2 Ví dụ #2 static::
Sử dụng đơn giản ¶
Ghi chú:
self::
3
self::
4
static::
8 Trong các bối cảnh không tĩnh, lớp được gọi sẽ là lớp của thể hiện đối tượng. Vì self::
1 sẽ cố gắng gọi các phương thức riêng tư từ cùng một phạm vi, sử dụng static::
có thể cho kết quả khác nhau. Một điểm khác biệt khác là static::
chỉ có thể đề cập đến các thuộc tính tĩnh. ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
self::
6
static::
2
self::
8 Ví dụ #2 static::
Sử dụng đơn giản ¶
Ghi chú:
self::
9
Trong các bối cảnh không tĩnh, lớp được gọi sẽ là lớp của thể hiện đối tượng. Vì self::
1 sẽ cố gắng gọi các phương thức riêng tư từ cùng một phạm vi, sử dụng static::
có thể cho kết quả khác nhau. Một điểm khác biệt khác là static::
chỉ có thể đề cập đến các thuộc tính tĩnh. ¶
Ví dụ #3 static::
Sử dụng trong bối cảnh không tĩnh
self::
0
self::
1
self::
2
static::
2
self::
4 Độ phân giải của các ràng buộc tĩnh muộn sẽ dừng lại ở một cuộc gọi tĩnh được giải quyết hoàn toàn mà không dự phòng. Mặt khác, các cuộc gọi tĩnh bằng các từ khóa như parent::
hoặc self::
sẽ chuyển tiếp thông tin gọi. ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
self::
5
self::
6
self::
7
static::
8 Ví dụ #2 static::
Sử dụng đơn giản ¶
Ghi chú:
self::
9
__CLASS__
0
__CLASS__
1
__CLASS__
2 Trong các bối cảnh không tĩnh, lớp được gọi sẽ là lớp của thể hiện đối tượng. Vì self::
1 sẽ cố gắng gọi các phương thức riêng tư từ cùng một phạm vi, sử dụng static::
có thể cho kết quả khác nhau. Một điểm khác biệt khác là static::
chỉ có thể đề cập đến các thuộc tính tĩnh. ¶
Ví dụ #3 static::
Sử dụng trong bối cảnh không tĩnh
__CLASS__
3
__CLASS__
4
__CLASS__
5
__CLASS__
6 Trong các bối cảnh không tĩnh, lớp được gọi sẽ là lớp của thể hiện đối tượng. Vì self::
1 sẽ cố gắng gọi các phương thức riêng tư từ cùng một phạm vi, sử dụng static::
có thể cho kết quả khác nhau. Một điểm khác biệt khác là static::
chỉ có thể đề cập đến các thuộc tính tĩnh. ¶
Ví dụ #3 static::
Sử dụng trong bối cảnh không tĩnh
__CLASS__
7
__CLASS__
4
__CLASS__
5
::
00 Độ phân giải của các ràng buộc tĩnh muộn sẽ dừng lại ở một cuộc gọi tĩnh được giải quyết hoàn toàn mà không dự phòng. Mặt khác, các cuộc gọi tĩnh bằng các từ khóa như parent::
hoặc self::
sẽ chuyển tiếp thông tin gọi. ¶
Ví dụ #4 Các cuộc gọi chuyển tiếp và không chuyển tiếp
::
01
::
02
::
03
::
04Sergei tại 2440Media dot com ¶ ¶
14 năm trước
::
05
::
06
::
07
::
08
static::
8MHH2422 tại hotmail dot com ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
::
10
::
11
static::
8 Ví dụ #2 static::
Sử dụng đơn giản ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
::
13
::
14
::
15
::
16 Ví dụ #2 static::
Sử dụng đơn giản ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
::
17
::
18
::
19
::
20 Ví dụ #2 static::
Sử dụng đơn giản
¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
::
21
::
22
::
23
::
24
::
25
::
26
::
27
::
28
::
29
::
30
::
31
static::
8 Ví dụ #2 static::
Sử dụng đơn giản ¶
Các ràng buộc tĩnh muộn cố gắng giải quyết giới hạn đó bằng cách giới thiệu một từ khóa tham chiếu lớp ban đầu được gọi là thời gian chạy. Về cơ bản, một từ khóa cho phép tham chiếu ::
4 từ ::
5 trong ví dụ trước. Người ta đã quyết định không giới thiệu một từ khóa mới mà sử dụng ::
6 đã được bảo lưu.
::
33
::
34
::
35
static::
2
::
37Ẩn danh ¶ ¶
11 năm trước
::
38
::
39
::
40
::
41tfn dot yldrm tại hotmail dot com ¶ ¶
11 năm trước
::
42
::
15
::
44tfn dot yldrm tại hotmail dot com ¶ ¶
11 năm trước
::
45
::
46
::
47
parent::
5
::
49tfn dot yldrm tại hotmail dot com ¶ ¶
Jrfish dot x tại gmail dot com ¶
::
50
::
51
::
15
::
53Kenneth tại Kennethjorgensen dot com ¶ ¶
Jrfish dot x tại gmail dot com ¶
::
54
::
55
parent::
5
::
57Ẩn danh ¶ ¶
Kenneth tại Kennethjorgensen dot com ¶
::
58
::
59
static::
5
::
61