Hướng dẫn what is early binding and late binding in php? - ràng buộc sớm và ràng buộc muộn trong php là gì?

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

Ràng buộc sớm và ràng buộc muộn là gì?

Binding sớm làm giảm số lượng và mức độ nghiêm trọng của các lỗi thời gian chạy vì nó cho phép trình biên dịch báo cáo lỗi khi một chương trình được biên dịch. Binding trễ chỉ có thể được sử dụng để truy cập các thành viên loại được tuyên bố là công khai. Truy cập các thành viên được tuyên bố là bạn bè hoặc bạn bè được bảo vệ dẫn đến lỗi thời gian chạy.

Binding trễ trong PHP là gì?

"Binding muộn" xuất phát từ thực tế là tĩnh :: 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.comes from the fact that static:: will not be resolved using the class where the method is defined but it will rather be computed using runtime information. It was also called a "static binding" as it can be used for (but is not limited to) static method calls.

Ý bạn là gì khi ràng buộc sớm?

Liên kết sớm: Liên kết có thể được giải quyết tại thời điểm biên dịch bởi trình biên dịch được gọi là liên kết tĩnh hoặc sớm.Liên kết của tất cả các phương pháp tĩnh, riêng tư và cuối cùng được thực hiện vào thời gian biên dịch.The binding which can be resolved at compile time by the compiler is known as static or early binding. Binding of all the static, private and final methods is done at compile-time.

Sự khác biệt giữa ràng buộc sớm và muộn giải thích với một ví dụ của mỗi người là gì?

Các cuộc gọi phương thức thông thường và các cuộc gọi phương thức quá tải là các ví dụ về ràng buộc sớm, trong khi phản xạ và ghi đè phương pháp (đa hình thời gian chạy) là các ví dụ về ràng buộc muộn.Sự ràng buộc của các phương thức riêng tư, tĩnh và cuối cùng xảy ra vào thời gian biên dịch vì chúng không thể bị ghi đè.. The binding of private, static, and final methods happens at the compile-time as they cannot be overridden.