Hướng dẫn late static binding in php example - liên kết tĩnh trễ trong ví dụ php

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

::3

Ví 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

::3

Ví 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::7

Ví 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::1

parent::2

Ví 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::8

Sergei tại 2440Media dot com ¶

14 năm trước

static::9

static::0

static::2

static::2

MHH2422 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

::04

Sergei tại 2440Media dot com ¶

14 năm trước

::05

::06

::07

::08

static::8

MHH2422 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

::41

tfn dot yldrm tại hotmail dot com ¶

11 năm trước

::42

::15

::44

tfn dot yldrm tại hotmail dot com ¶

11 năm trước

::45

::46

::47

parent::5

::49

tfn dot yldrm tại hotmail dot com ¶

Jrfish dot x tại gmail dot com ¶

::50

::51

::15

::53

Kenneth 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

Liên kết tĩnh muộn trong PHP là gì?

Liên kết tĩnh muộn là một tính năng được giới thiệu với PHP 5.3. Nó cho phép chúng ta kế thừa các phương thức tĩnh từ một lớp cha và tham chiếu lớp con được gọi.allows us to inherit static methods from a parent class, and to reference the child class being called.

Liên kết muộn và ràng buộc sớm trong PHP là gì?

Nếu trình biên dịch biết tại thời gian biên dịch được gọi là hàm nào, nó được gọi là ràng buộc sớm.Nếu một trình biên dịch không biết tại biên dịch thời gian nào có chức năng gọi lên cho đến khi chạy, nó được gọi là ràng buộc muộn.

Phiên bản PHP nào đã giới thiệu khái niệm gọi là ràng buộc tĩnh muộn?

Điều này được gọi là ràng buộc tĩnh muộn.Tính năng này của ràng buộc tĩnh muộn đã được giới thiệu trong PHP 5.3 trở lên, các phiên bản trước sẽ cho thấy một lỗi nghiêm trọng.PHP 5.3 and above, previous versions will show a fatal error.

Bản thân là gì :: trong PHP?

Tự được sử dụng để truy cập các biến hoặc phương thức tĩnh hoặc lớp và điều này được sử dụng để truy cập các biến hoặc phương thức không tĩnh hoặc đối tượng.Vì vậy, hãy sử dụng bản thân khi có nhu cầu truy cập một cái gì đó thuộc về một lớp và sử dụng $ Điều này khi có nhu cầu truy cập một thuộc tính thuộc đối tượng của lớp.used to access static or class variables or methods and this is used to access non-static or object variables or methods. So use self when there is a need to access something which belongs to a class and use $this when there is a need to access a property belonging to the object of the class.