Tôi cho rằng bạn đã quen thuộc với các khái niệm và thuật ngữ Lập trình hướng đối tượng [OOP]. Nếu không, hãy đọc "Java OOP" hoặc "C++ OOP"
Bắt đầu bằng ví dụ
Hãy bắt đầu với các ví dụ trên
- Định nghĩa một lớp với các biến thành viên riêng, hàm tạo, hàm hủy, getters/setters công khai và phương thức công khai;
- Phân bổ các cá thể thể hiện của lớp;
- Truy cập biến/hàm của cá thể
Ví dụ. Lớp MyCircle
Chúng ta sẽ bắt đầu với một lớp có tên là
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235, mô hình một đường tròn có bán kính cụ thể, như thể hiện trong sơ đồ lớp sau
Định nghĩa của lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55MyCircleTest. php
Lái thử cho hạng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Bạn có thể chạy chương trình thông qua PHP CLI [Giao diện dòng lệnh]
$ php MyCircleTest.php
Các kết quả đầu ra dự kiến là
Ví dụ. Lớp MyTime
Lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238 mô hình hóa một thể hiện thời gian của giờ, phút và giây, như thể hiện trong sơ đồ lớp sau
Định nghĩa lớp cho lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238________số 8MyTimeTest. php
Lái thử cho hạng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 230
đầu ra là
Cách hoạt động của OOP trong OOP
Xác định một lớpMột lớp bao gồm các biến thành viên và hàm. Để xác định một lớp, sử dụng từ khóa
$ php MyCircleTest.php1, như sau
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 232Hàm tạo __construct[]
Constructor là một hàm đặc biệt có tên là
$ php MyCircleTest.php2. Trình xây dựng được sử dụng để xây dựng một thể hiện và khởi tạo các biến thể hiện. Để xây dựng một thể hiện của một lớp, bạn cần gọi hàm tạo thông qua toán tử
$ php MyCircleTest.php3 [như minh họa trong trình điều khiển thử nghiệm]. Hàm tạo không trả về bất cứ thứ gì, do đó, sẽ không có câu lệnh
$ php MyCircleTest.php4 bên trong hàm tạo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236
PHP KHÔNG hỗ trợ nạp chồng hàm [không giống như C++ và Java]. Nói cách khác, chỉ có một phiên bản của hàm tạo. Tuy nhiên, trong PHP, bạn có thể cung cấp giá trị mặc định cho các tham số của hàm, bao gồm cả hàm tạo. Theo cách này, hàm tạo có thể được gọi với các đối số khác nhau. Ví dụ,
PHP không cung cấp hàm tạo mặc định không có đối số [không có đối số] [không giống như Java]. Bạn cần xác định rõ ràng hàm tạo, nếu được yêu cầu
Hàm hủy __destroy[]Tương tự, bạn có thể định nghĩa hàm hủy có tên là
$ php MyCircleTest.php5 cho một lớp. Hàm hủy sẽ không mang bất kỳ tham số nào. Nó sẽ được chạy trước khi phiên bản bị hủy [hoặc bị hủy bỏ]. Hàm hủy không được sử dụng phổ biến
Từ kết quả của các ví dụ trên, có thể thấy rằng hàm hủy được gọi trên tất cả các đối tượng khi đến cuối tệp, trước khi chương trình thoát. Để kích hoạt hàm hủy một cách rõ ràng, bạn có thể gọi
$ php MyCircleTest.php6 trên một đối tượng. Ví dụ,Cấp phát một thực thể - Toán tử mới
Để cấp phát một thể hiện của một lớp, hãy sử dụng toán tử
$ php MyCircleTest.php3 để gọi một hàm tạo, ở dạng
$ php MyCircleTest.php8Truy cập Thành viên - Thành viên của Nhà điều hành [->]
Để truy cập các biến/hàm thành viên, hãy sử dụng toán tử thành viên [
$ php MyCircleTest.php9], ở dạng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1170. Ví dụ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1171 đề cập đến trường hợp hiện tại. Để tham chiếu một biến/hàm thành viên TRONG định nghĩa lớp, bạn PHẢI đặt trước
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1171, e. g. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1173,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1174. Hãy lưu ý rằng bạn không thể bỏ qua
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1171 [không giống như Java]Công cụ sửa đổi kiểm soát truy cập - công khai, riêng tư và được bảo vệ
Chúng ta có thể sử dụng công cụ sửa đổi kiểm soát truy cập để hạn chế quyền truy cập vào một biến/hàm thành viên. PHP hỗ trợ các công cụ sửa đổi kiểm soát truy cập này cho các biến và hàm thành viên
- công cộng. Có thể truy cập bởi tất cả. Đây là mặc định
- riêng. Chỉ có thể truy cập trong lớp
- được bảo vệ. Có thể truy cập bởi các lớp con
Getters là setters được sử dụng để truy cập và biến đổi các biến thành viên riêng tư, như trong các ví dụ trên
Một thực tế PHP phổ biến là sử dụng cùng một chức năng cho getter kiêm setter, được phân biệt bởi đối số của nó. Ví dụ,
__toString[]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1176 là một trong những phương thức được gọi là ma thuật, sẽ trả về một chuỗi biểu diễn của phiên bản hiện tại. Nó được gọi ngầm khi đối tượng được coi là một chuỗi. Ví dụ,
Hãy lưu ý rằng nếu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1176 không được xác định, "
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1178" sẽ gây ra lỗi thời gian chạy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1176 tương tự như
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2300 trong Java. Tuy nhiên, không giống như các lớp Java luôn kế thừa một
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2300 từ lớp cha gốc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2302,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1176 trong PHP phải được định nghĩa rõ ràng cho mỗi lớp__LỚP__
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2304 là một trong những hằng số ma thuật được gọi là trong PHP, giữ tên lớp trong chuỗiDocBlock [hoặc PhpDoc] Nhận xét
Các nhận xét kèm theo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2305 được gọi là "DocBlock" hoặc "PhpDoc", có thể được trích xuất để tạo tài liệu [như JavaDoc]. Bạn có thể sử dụng các đánh dấu như
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2306 và
$ php MyCircleTest.php4 để nhắm mục tiêu các mô tảXử lý ngoại lệ và thử bắt cuối cùng
Các câu lệnh trong khối thử được thực hiện theo trình tự. Nếu một trong các câu lệnh đưa ra một ngoại lệ, các câu lệnh còn lại sẽ không được thực thi. Thay vào đó, việc thực thi chuyển sang khối catch. Nếu tất cả các câu lệnh trong khối try không đưa ra bất kỳ ngoại lệ nào, thì khối try sẽ hoàn thành và khối catch không được thực thi. Lưu ý rằng quá trình thực thi luôn tiếp tục sau khối try-catch, bất kể có ngoại lệ nào hay không
Cấu trúc try-catch hỗ trợ xử lý lỗi/ngoại lệ một cách duyên dáng. Nếu không có try-catch, chương trình sẽ bị ngắt đột ngột khi gặp ngoại lệ. Cấu trúc try-catch cũng tách biệt logic chính và logic xử lý ngoại lệ, để cải thiện kỹ thuật phần mềm
OOP hơn
tĩnh
Thành viên
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308 [biến hoặc hàm] thuộc về lớp, không thuộc về thể hiện. Nói cách khác, tất cả các phiên bản chia sẻ cùng một bản sao của một thành viên tĩnh
Ví dụ: hãy viết lại lớp MyCircle của chúng tôi để bao gồm một biến
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2320 để duy trì số vòng kết nối đã tạo, như thể hiện trong sơ đồ lớp sau. Lưu ý rằng các thành viên tĩnh được gạch chân trong ký hiệu UML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 233MyCircleWithCountTest. php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234
Các kết quả đầu ra dự kiến là
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235
Bạn có thể đếm mà không có
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308 không?
Hằng số - const
Một biến thành viên không đổi được xác định bởi từ khóa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2322. Các hằng số luôn là
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2323 và
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308, không thể sửa đổi nội dung của chúng. Không giống như các biến thông thường, các hằng số không bắt đầu bằng dấu $ ở đầu. Trong định nghĩa lớp, các hằng số có thể được tham chiếu qua
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2325, giống như bất kỳ thành viên
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308 nào. Bên ngoài định nghĩa lớp, chúng được tham chiếu qua
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327. Theo quy ước, sử dụng chữ hoa cho tên hằng, e. g. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2328,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2329
Phương pháp ma thuật và hằng số
Các phương thức ma thuật là các phương thức đặc biệt, bắt đầu bằng dấu gạch dưới kép, có thể được định nghĩa trong bất kỳ lớp nào và được thực thi thông qua chức năng PHP tích hợp. Ví dụ như,
$ php MyCircleTest.php
2. người xây dựng$ php MyCircleTest.php
5. kẻ hủy diệt1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
6. trả về một chuỗi đại diện của đối tượng này. Được gọi ngầm nếu một chuỗi được mong đợi1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
63. để nhân bản một bản sao1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
64 và1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
65. để tuần tự hóa1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
66,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
67,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
68 và1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
69. Được gọi khi cố gắng truy cập một biến thành viên không khả dụng.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
66 được kích hoạt bởi$ php MyCircleTest.php
6;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
34 và1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
35. Được gọi khi cố gắng gọi một hàm [hoặc hàm tĩnh] không khả dụng1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
36. thông qua1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
371 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
38
[TODO] Ví dụ
Hằng ma thuật [
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2323 và
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308], được đặt tên bằng chữ hoa và bắt đầu và kết thúc bằng hai dấu gạch dưới [không có $ ở đầu], chứa các thuộc tính chỉ đọc đặc biệt. Ví dụ như,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
04. tên lớp hiện tại trong chuỗi1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
42. tên tệp hiện tại1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
43. số dòng, được sử dụng cùng với1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
421 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
45. thư mục tuyệt đối, giống như1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
461 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
47 và1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
48. tên hàm hoặc phương thức1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
49. không gian tên hiện tại trong chuỗi
[TODO] Ví dụ
bản thân. , cha mẹ. và tĩnh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2350,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2351 và
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2352 cho phép bạn truy cập các thành viên
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308 và
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2322 [
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2323 và
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308] TRONG định nghĩa lớp.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2350 đề cập đến lớp hiện tại, như được minh họa trong ví dụ trên.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2351 đề cập đến lớp cha và
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2352 đề cập đến lớp hiện tại nhưng có ràng buộc muộn - sẽ được thảo luận sau trong phần kế thừa
Nhớ lại rằng bên ngoài định nghĩa lớp, bạn có thể truy cập thành viên
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2323
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308 và
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2322 thông qua
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2303bản thân vs. $này
Sử dụng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1171 để chỉ đối tượng hiện tại. Sử dụng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2305 để chỉ lớp hiện tại. Nói cách khác, trong một định nghĩa lớp, sử dụng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2306 để tham chiếu các thành viên không thuộc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308, sử dụng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308 cho các thành viên
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308
Nhập gợi ý cho các tham số chức năng
Trong định nghĩa hàm, bạn có thể khai báo LOẠI của tham số, chẳng hạn như
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2310, tên lớp hoặc giao diện hoặc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2311. Tuy nhiên, gợi ý loại KHÔNG áp dụng cho các loại vô hướng, chẳng hạn như int hoặc string. Ví dụ,
Di sản
Ví dụ. Các lớp MyCircle và MyCylinder
Hãy minh họa kế thừa lớp cha-lớp con với ví dụ sau về lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 và lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2313
Giống như ví dụ trước
Xi lanh của tôi. phpLớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2313 kế thừa từ lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235, với nhiều biến/hàm thành viên hơn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 230MyCylinderTest. php
Lái thử cho hạng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2313
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 231
Các kết quả đầu ra dự kiến là
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 232
Kế thừa hoạt động như thế nào
mở rộngBạn có thể định nghĩa một lớp con kế thừa một lớp cha thông qua từ khóa ________ 017
bản thân và bố mẹTrong định nghĩa lớp con, bạn có thể sử dụng từ khóa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2318 ở dạng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2319 để chỉ một thành viên của lớp cha; .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2322 được gọi là toán tử phân giải phạm viGhi đè phương thức
Lớp con có thể ghi đè phương thức kế thừa từ lớp cha bằng cách cung cấp định nghĩa riêng của nó. Ví dụ, lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2313 có thể override phương thức
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2324 kế thừa từ lớp cha
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 như saucuối cùng
Không thể ghi đè biến/phương thức
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2326 trong lớp con
đa hình
phương thức trừu tượng và lớp trừu tượng
Phương thức
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327 là phương thức chỉ có chữ ký, không có triển khai. Một lớp chứa một hoặc nhiều phương thức
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327 là một lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327. Một lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327 không thể được khởi tạo, vì định nghĩa của nó không đầy đủ. Để sử dụng một lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327, hãy lấy một lớp con và ghi đè các phương thức của
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327. Lớp con hiện đã hoàn thành và có thể được khởi tạo
Ví dụ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 233
giao diện
Một giao diện là một lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327 thuần túy, chỉ chứa các phương thức
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327. Một giao diện được xác định bằng từ khóa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2335 [thay vì
$ php MyCircleTest.php1]. Để lấy một lớp con từ một giao diện, hãy sử dụng từ khóa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2337 [thay vì
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2317]
Ví dụ như,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234
Hãy lưu ý rằng việc triển khai lớp trừu tượng và giao diện của PHP hoàn toàn giống với Java
đặc điểm
Nhìn thấy
OOP hơn
đối tượng nhân bản
PHP cung cấp một từ khóa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2339 để sao chép một đối tượng, thực hiện sao chép bóng tối. Nếu phương thức ma thuật
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2363 được định nghĩa trong lớp, nó sẽ được chạy sau bản sao bóng tối
__autoload[]
[LÀM]
không gian tên
Bạn có thể có hai phiên bản của lớp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2341 trong chương trình của mình không?
Một không gian tên [được gọi là gói trong Java] nhóm các lớp, giao diện, hàm và hằng có liên quan. Nó cố gắng
- giải quyết xung đột đặt tên;
- cung cấp bí danh cho tên dài
Những từ khóa này được sử dụng trong quản lý không gian tên
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
421 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
43
Để xác định một không gian tên, hãy viết "
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2344" làm câu lệnh ĐẦU TIÊN trong tệp PHP của bạn, đặt không gian tên "hiện tại". Ví dụ,
Bạn có thể xác định nhiều không gian tên trong một tệp. Nhưng đừng làm điều đó để thực hành tốt nhất
không gian toàn cầuBất kỳ thực thể nào được xác định trong không gian tên đều thuộc về không gian chung
không gian tên phụPHP hỗ trợ cái gọi là không gian tên phụ, với các tên được phân tách bằng dấu gạch chéo ngược, e. g. , "
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2345". Hãy lưu ý rằng không có dấu gạch chéo ngược hàng đầu
Cách tốt nhất là giữ nguồn của bạn trong thư mục khớp với không gian tên. Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2345 sẽ được lưu trong Đường dẫn/Đến/MyProject/ZBox/ModSec
Một lần nữa, hãy lưu ý rằng PHP sử dụng dấu gạch chéo ngược trong không gian tên
Các thực thể tham chiếu trong không gian tênĐể tham chiếu một thực thể trong một không gian tên, bạn có thể
- Sử dụng tên đủ điều kiện. e. g. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
47. Hãy lưu ý rằng nó bắt đầu bằng dấu gạch chéo ngược - Sử dụng tên không đủ tiêu chuẩn. e. g. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
48. Điều này sẽ được giải quyết thành1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
49 - Sử dụng tên đủ điều kiện một phần. e. g. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
50 [không có dấu gạch chéo ngược ở đầu]. Điều này sẽ được giải quyết thành1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
51. Tên đủ điều kiện một phần là lộn xộn và nên tránh
Để truy cập một thực thể trong một không gian tên khác bên ngoài không gian tên hiện tại, hãy sử dụng tên đủ điều kiện
Để truy cập một thực thể trong không gian chung bên ngoài không gian tên hiện tại, hãy đặt tiền tố cho thực thể bằng dấu gạch chéo ngược ở đầu. Ví dụ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2352
[TODO] Ví dụ
Hằng số ma thuật __NAMESPACE__Hằng ma thuật
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2349 chứa tên của không gian tên hiện tại [trong chuỗi]. Trong không gian chung,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2349 chứa một chuỗi rỗngNhập khẩu với "sử dụng. "
Bạn có thể gọi toán tử
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2355 để nhập một lớp, giao diện hoặc không gian tên. Khi một thực thể được nhập, bạn có thể truy cập thực thể đó bằng tên của thực thể đó, thay vì tên đủ điều kiện. [Điều này tương tự như câu lệnh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2356 trong Java; hoặc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2357 trong C#. ] PHP5. 6 cũng hỗ trợ nhập các hàm và hằng số. Ví dụ,Bí danh với "sử dụng. như. "
Hơn nữa, bạn có thể xác định bí danh ở dạng "
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2358". Ví dụ,Chức năng/Hằng số quay trở lại Không gian toàn cầu
Một tên lớp không đủ tiêu chuẩn được phân giải thành không gian tên hiện tại. Để sử dụng một lớp bên ngoài không gian tên hiện tại, bạn cần sử dụng tên đủ điều kiện
Tên hàm và hằng số không đủ tiêu chuẩn được phân giải tương tự thành không gian tên hiện tại. Tuy nhiên, nếu nó không thể được giải quyết, hàm/hằng sẽ quay trở lại không gian chung