người hướng dẫn. [0. 00] Một cách tuyệt vời để cấu trúc mã của bạn khi nó ngày càng phức tạp hơn là sử dụng các lớp PHP. Các lớp cho phép bạn tổ chức và cùng định vị nhiều chức năng của logic nghiệp vụ với nhau thành một thực thể thống nhất
[0. 16] Hãy tiếp tục và tạo một thư mục mới cho các lớp của chúng ta và chúng ta sẽ đặt tên cho thư mục này là các lớp. Sau đó, trong đó, chúng tôi sẽ tạo một tệp mới có tên là Tác giả. php. Đảm bảo rằng Tác giả có vốn A. Cách tốt nhất là đặt tên tất cả các tên tệp cho các lớp bằng chữ in hoa
[0. 40] Tiếp theo, hãy tiếp tục và mở thẻ PHP và chúng tôi sẽ khai báo các loại nghiêm ngặt. Tiếp theo, chúng tôi sẽ sử dụng từ khóa lớp theo sau là tên của lớp của chúng tôi, đó là Tác giả. Sau đó, những gì tiếp theo là một dấu ngoặc nhọn mở và đóng
[0. 59] Đây là một lớp học. Không có gì khác đang diễn ra bên trong nó, nhưng nó là một lớp đầy đủ đại diện cho một thực thể Tác giả. Bây giờ, chúng tôi sẽ đưa lớp này vào các chức năng của chúng tôi. tập tin php. Sau thẻ khai báo nghiêm ngặt này ở đầu tệp của chúng tôi, hãy tiếp tục và thêm một câu lệnh yêu cầu và chúng tôi sẽ yêu cầu tệp này trong các lớp/Tác giả. php
[1. 29] Khởi tạo PHP xảy ra với một từ khóa đặc biệt gọi là mới. Khi chúng ta theo dõi new với tên lớp mà chúng ta muốn tạo, theo sau là dấu ngoặc đơn, khi PHP phân tích cú pháp mã, nó sẽ tạo một đối tượng mới là một thể hiện của lớp mới này mà chúng ta đã tạo
[1. 48] Trong getPosts, hãy tiếp tục và tạo một biến tác giả mới, và chúng ta sẽ đặt nó bằng new Author, là tên lớp của chúng ta
[1. 59] Hiện tại, mã này chỉ đang tạo một thể hiện mới của đối tượng tác giả này và gán nó cho biến tác giả. Biến này hiện giữ một tham chiếu đến đối tượng mới được tạo này
Trong bài tập trước, chúng ta đã tạo một lớp [bản thiết kế] cho bất kỳ thú cưng nào mà chúng ta muốn tạo. Nhưng chúng tôi đã không tạo ra bất kỳ vật nuôi cá nhân, thực tế nào. Vì các đối tượng là các thể hiện cụ thể của một lớp, nên quá trình tạo ra chúng được gọi là khởi tạo
Trong PHP, các đối tượng được khởi tạo bằng cách sử dụng từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 276 theo sau là tên lớp và dấu ngoặc đơn
$very_good_dog = new Pet[];
Bây giờ chúng ta có đối tượng đầu tiên,
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 277. Chúng ta tương tác với các thuộc tính của đối tượng bằng cách sử dụng toán tử đối tượng [$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 278] theo sau là tên của thuộc tính [không có ký hiệu đô la,$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 279]Có, một đối tượng có thể được khởi tạo và một phương thức có thể được gọi trên một dòng bằng PHP. Tính năng này đã có hiệu lực bắt đầu từ phiên bản PHP 5. 4
Một đối tượng có thể được khởi tạo bằng cách truy cập thành viên lớp của lớp. Điều này có thể được nhìn thấy trong đoạn mã dưới đây -
[new my_var]-> my_instance[]Giải thích mã − Ở đây, my_instance là phương thức và my_var là đối tượng cần được khởi tạo
Các định nghĩa lớp cơ bản bắt đầu bằng từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270, theo sau là tên lớp, tiếp theo là một cặp dấu ngoặc nhọn bao quanh các định nghĩa về thuộc tính và phương thức thuộc về lớpTên lớp có thể là bất kỳ nhãn hợp lệ nào, miễn là nó không phải là từ dành riêng cho PHP. Tên lớp hợp lệ bắt đầu bằng một chữ cái hoặc dấu gạch dưới, theo sau là bất kỳ số lượng chữ cái, số hoặc dấu gạch dưới nào. Là một biểu thức chính quy, nó sẽ được thể hiện như vậy.
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270Một lớp có thể chứa các hằng, biến [được gọi là "thuộc tính"] và hàm [được gọi là "phương thức"] của riêng nó
Ví dụ #1 Định nghĩa lớp đơn giản
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 271$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 272Biến giả $this khả dụng khi một phương thức được gọi từ bên trong ngữ cảnh đối tượng. $đây là giá trị của đối tượng gọi
Cảnh báo
Gọi một phương thức không tĩnh sẽ gây ra Lỗi tĩnh. Trước PHP 8. 0. 0, điều này sẽ tạo ra một thông báo không dùng nữa và $this sẽ không được xác định
Ví dụ #2 Một số ví dụ về biến giả $this
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 273$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 274$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 275$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 276$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 277$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 278Đầu ra của ví dụ trên trong PHP 7
[new my_var]-> my_instance[]1Đầu ra của ví dụ trên trong PHP 8
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 27lớp chỉ đọc
Kể từ PHP 8. 2. 0, một lớp có thể được đánh dấu bằng công cụ sửa đổi chỉ đọc. Đánh dấu một lớp là chỉ đọc sẽ thêm thuộc tính vào mọi thuộc tính được khai báo và ngăn việc tạo. Hơn nữa, không thể thêm hỗ trợ cho chúng bằng cách sử dụng thuộc tính AllowDynamicProperties. Cố gắng làm như vậy sẽ gây ra lỗi thời gian biên dịch
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 279[new my_var]-> my_instance[]40Vì không thể đánh dấu thuộc tính untyped, cũng như tĩnh bằng công cụ sửa đổi
[new my_var]-> my_instance[]41, nên các lớp chỉ đọc cũng không thể khai báo chúng[new my_var]-> my_instance[]42[new my_var]-> my_instance[]43[new my_var]-> my_instance[]44[new my_var]-> my_instance[]45Lớp chỉ đọc có thể là nếu và chỉ khi lớp con cũng là lớp chỉ đọc
Mới
Để tạo một thể hiện của một lớp, phải sử dụng từ khóa
[new my_var]-> my_instance[]46. Một đối tượng sẽ luôn được tạo trừ khi đối tượng đó có một hàm tạo được xác định sẽ đưa ra một ngoại lệ do lỗi. Các lớp nên được xác định trước khi khởi tạo [và trong một số trường hợp, đây là một yêu cầu]Nếu một chuỗi chứa tên của một lớp được sử dụng với
[new my_var]-> my_instance[]46, một phiên bản mới của lớp đó sẽ được tạo. Nếu lớp nằm trong một không gian tên, tên đầy đủ của nó phải được sử dụng khi thực hiện việc nàyGhi chú
Nếu không có đối số nào được chuyển đến hàm tạo của lớp, dấu ngoặc đơn sau tên lớp có thể được bỏ qua
Ví dụ #3 Tạo một thể hiện
[new my_var]-> my_instance[]48[new my_var]-> my_instance[]49Kể từ PHP 8. 0. 0, sử dụng
[new my_var]-> my_instance[]46 với các biểu thức tùy ý được hỗ trợ. Điều này cho phép khởi tạo phức tạp hơn nếu biểu thức tạo ra một chuỗi. Các biểu thức phải được bao bọc trong dấu ngoặc đơnVí dụ #4 Tạo một thể hiện bằng một biểu thức tùy ý
Trong ví dụ đã cho, chúng tôi hiển thị nhiều ví dụ về biểu thức tùy ý hợp lệ tạo ra tên lớp. Phần này hiển thị lời gọi hàm, nối chuỗi và hằng số
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2751$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2752$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2753$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2754Đầu ra của ví dụ trên trong PHP 8
[new my_var]-> my_instance[]4Trong ngữ cảnh lớp, có thể tạo một đối tượng mới bằng
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2755 và$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2756Khi gán một thể hiện đã được tạo của một lớp cho một biến mới, biến mới sẽ truy cập vào thể hiện giống như đối tượng đã được gán. Hành vi này giống nhau khi chuyển các thể hiện cho một hàm. Một bản sao của một đối tượng đã được tạo có thể được tạo bằng cách sao chép nó
Ví dụ #5 Gán đối tượng
[new my_var]-> my_instance[]48$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2758$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2759$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2750$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2751Ví dụ trên sẽ xuất ra
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 275Có thể tạo các thể hiện của một đối tượng theo một số cách
Ví dụ #6 Tạo đối tượng mới
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2752$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2753$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2754$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2755$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2756Ví dụ trên sẽ xuất ra
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 275Có thể truy cập một thành viên của một đối tượng mới được tạo trong một biểu thức
Ví dụ #7 Truy cập thành viên của đối tượng mới tạo
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2757Ví dụ trên sẽ xuất ra một cái gì đó tương tự như
Ghi chú. Trước PHP 7. 1, các đối số không được ước tính nếu không có hàm tạo nào được xác định
Thuộc tính và phương thức
Các thuộc tính và phương thức của lớp nằm trong các "không gian tên" riêng biệt, vì vậy có thể có một thuộc tính và một phương thức có cùng tên. Việc đề cập đến cả một thuộc tính và một phương thức có cùng một ký hiệu và liệu một thuộc tính sẽ được truy cập hay một phương thức sẽ được gọi, chỉ phụ thuộc vào ngữ cảnh. e. việc sử dụng là truy cập biến hay gọi hàm
Ví dụ #8 Quyền truy cập tài sản so với. gọi phương thức
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2758$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2759$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2770Ví dụ trên sẽ xuất ra
Điều đó có nghĩa là không thể trực tiếp gọi một chức năng ẩn danh đã được gán cho một thuộc tính. Thay vào đó, thuộc tính phải được gán cho một biến trước, chẳng hạn. Có thể gọi trực tiếp một thuộc tính như vậy bằng cách đặt nó trong dấu ngoặc đơn
Ví dụ #9 Gọi một hàm ẩn danh được lưu trữ trong một thuộc tính
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2771$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2772$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2773$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2774Ví dụ trên sẽ xuất ra
mở rộng
Một lớp có thể kế thừa các hằng, phương thức và thuộc tính của lớp khác bằng cách sử dụng từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2775 trong phần khai báo lớp. Không thể mở rộng nhiều lớp;Các hằng, phương thức và thuộc tính kế thừa có thể được ghi đè bằng cách khai báo lại chúng với cùng tên được định nghĩa trong lớp cha. Tuy nhiên, nếu lớp cha đã định nghĩa một phương thức hoặc hằng số là cuối cùng, thì chúng có thể không bị ghi đè. Có thể truy cập các phương thức bị ghi đè hoặc thuộc tính tĩnh bằng cách tham chiếu chúng với cha
Ghi chú. Kể từ PHP 8. 1. 0, hằng số có thể được khai báo là cuối cùng
Ví dụ #10 Kế thừa lớp đơn giản
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2776$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2777Ví dụ trên sẽ xuất ra
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 277Quy tắc tương thích chữ ký
Khi ghi đè một phương thức, chữ ký của nó phải tương thích với phương thức cha. Mặt khác, một lỗi nghiêm trọng được phát ra hoặc trước PHP 8. 0. 0, một lỗi cấp độ
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2778 được tạo ra. Chữ ký tương thích nếu nó tôn trọng các quy tắc phương sai, làm cho tham số bắt buộc trở thành tùy chọn và nếu có bất kỳ tham số mới nào là tùy chọn. Điều này được gọi là Nguyên tắc thay thế Liskov, viết tắt là LSP. Các phương thức , và$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2779 được miễn trừ khỏi các quy tắc tương thích chữ ký này và do đó sẽ không gây ra lỗi nghiêm trọng trong trường hợp chữ ký không khớpVí dụ #11 Các phương thức con tương thích
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2780$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2781$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2782$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2783Ví dụ trên sẽ xuất ra
Các ví dụ sau đây chứng minh rằng một phương thức con loại bỏ một tham số hoặc bắt buộc một tham số tùy chọn không tương thích với phương thức cha
Ví dụ #12 Lỗi nghiêm trọng khi một phương thức con loại bỏ một tham số
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2784$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2785Đầu ra của ví dụ trên trong PHP 8 tương tự như
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 278Ví dụ #13 Lỗi nghiêm trọng khi một phương thức con bắt buộc tham số tùy chọn
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2784 $this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2787Đầu ra của ví dụ trên trong PHP 8 tương tự như
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 277Cảnh báo
Đổi tên tham số của phương thức trong lớp con không phải là sự không tương thích về chữ ký. Tuy nhiên, điều này không được khuyến khích vì nó sẽ dẫn đến Lỗi thời gian chạy nếu được sử dụng
Ví dụ #14 Lỗi khi sử dụng các tham số và đối số được đặt tên đã được đổi tên trong một lớp con
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2788$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2789$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2770$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2771Ví dụ trên sẽ xuất ra một cái gì đó tương tự như
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 272lớp
Từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270 cũng được sử dụng để phân giải tên lớp. Để có được tên đủ điều kiện của một lớp$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2773, hãy sử dụng$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2774. Điều này đặc biệt hữu ích với các lớp được đặt tênVí dụ #15 Độ phân giải tên lớp
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2775$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2776Ví dụ trên sẽ xuất ra
Ghi chú
Độ phân giải tên lớp bằng cách sử dụng
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2751 là một phép biến đổi thời gian biên dịch. Điều đó có nghĩa là tại thời điểm chuỗi tên lớp được tạo, chưa có quá trình tự động tải nào xảy ra. Kết quả là, tên lớp được mở rộng ngay cả khi lớp không tồn tại. Không có lỗi được đưa ra trong trường hợp đóVí dụ #16 Thiếu độ phân giải tên lớp
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2778Ví dụ trên sẽ xuất ra
Kể từ PHP 8. 0. 0, hằng số
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2751 cũng có thể được sử dụng trên các đối tượng. Độ phân giải này xảy ra trong thời gian chạy, không phải thời gian biên dịch. Tác dụng của nó giống như gọi get_class[] trên đối tượngVí dụ #17 Độ phân giải tên đối tượng
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2720Ví dụ trên sẽ xuất ra
Các phương thức và thuộc tính Nullsafe
Kể từ PHP 8. 0. 0, các thuộc tính và phương thức cũng có thể được truy cập bằng toán tử "nullsafe" thay thế.
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2721. Toán tử nullsafe hoạt động giống như truy cập thuộc tính hoặc phương thức như trên, ngoại trừ nếu đối tượng được hủy đăng ký là$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2722 thì$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2722 sẽ được trả về thay vì ném ngoại lệ. Nếu dereference là một phần của chuỗi, phần còn lại của chuỗi sẽ bị bỏ quaHiệu ứng này tương tự như gói từng quyền truy cập trong kiểm tra is_null[] trước, nhưng nhỏ gọn hơn
Ví dụ #18 Toán tử Nullsafe
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2724$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2725Ghi chú
Toán tử nullsafe được sử dụng tốt nhất khi null được coi là giá trị hợp lệ và có thể được mong đợi cho thuộc tính hoặc phương thức trả về. Để chỉ ra lỗi, tốt hơn là ném ngoại lệ
Một thể hiện trong PHP là gì?
Định nghĩa và cách sử dụng. Từ khóa instanceof được sử dụng để kiểm tra xem một đối tượng có thuộc một lớp hay không . Phép so sánh trả về true nếu đối tượng là một thể hiện của lớp, nó trả về false nếu không phải.Khởi tạo trong lập trình là gì?
Trong lập trình, khởi tạo là việc tạo ra một thể hiện thực hoặc hiện thực cụ thể của một trừu tượng hoặc mẫu , chẳng hạn như một lớp đối tượng hoặc .Làm cách nào để khởi tạo một lớp trong PHP?
Để tạo một lớp trong PHP, tất cả những gì bạn phải làm là sử dụng từ khóa class theo sau là tên của lớp . Sau đó, chúng tôi tạo một đối tượng của lớp xe và đặt tên là $car. Đây là một đối tượng xe hơi mới mà chúng tôi đã tạo.Khởi tạo một hàm có nghĩa là gì?
Khi mẫu hàm được gọi lần đầu tiên cho mỗi loại, trình biên dịch sẽ tạo một phần khởi tạo . Mỗi phần khởi tạo là một phiên bản của chức năng tạo khuôn mẫu dành riêng cho loại. Khởi tạo này sẽ được gọi mỗi khi hàm được sử dụng cho loại.