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ể
Thí dụ. Lớp MyCircle
Chúng ta sẽ bắt đầu với một lớp 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à
Thí 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ố 8_______MyTimeTest. 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 23 24 25 26 27 28 29 30 31 32 33 34 35 36
đầ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
class { memberVariables; memberFunctions; }Hàm tạo __construct[]
Constructor là một chức năng đặc biệt gọi 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
public function __construct[ arguments ] { body; }
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
Để phân bổ 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 23 24 25 26 27 28 29 30 31 32 33 34 35 360 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 23 24 25 26 27 28 29 30 31 32 33 34 35 360 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 23 24 25 26 27 28 29 30 31 32 33 34 35 362,
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__TẦNG LỚP__
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 364 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 23 24 25 26 27 28 29 30 31 32 33 34 35 365 đượ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 23 24 25 26 27 28 29 30 31 32 33 34 35 366 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
Một 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 23 24 25 26 27 28 29 30 31 32 33 34 35 368 [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 23 24 25 26 27 28 29 30 31 32 33 34 35 368
class { memberVariables; memberFunctions; }0 để 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 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42MyCircleWithCountTest. php
1 2 3 4 5 6 7 8 9 10 11
Các kết quả đầu ra dự kiến là
Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.
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 23 24 25 26 27 28 29 30 31 32 33 34 35 368 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
class { memberVariables; memberFunctions; }2. Các hằng số luôn là
class { memberVariables; memberFunctions; }3 và
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 368, nội dung của chúng không thể sửa đổi. 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
class { memberVariables; memberFunctions; }5, 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 23 24 25 26 27 28 29 30 31 32 33 34 35 368 nào. Bên ngoài định nghĩa lớp, chúng được tham chiếu qua
class { memberVariables; memberFunctions; }7. Theo quy ước, sử dụng chữ hoa cho tên hằng, e. g. ,
class { memberVariables; memberFunctions; }8,
class { memberVariables; memberFunctions; }9
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. hàm tạo$ 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 đợipublic function __construct[ arguments ] { body; }
3. để nhân bản một bản saopublic function __construct[ arguments ] { body; }
4 vàpublic function __construct[ arguments ] { body; }
5. để tuần tự hóapublic function __construct[ arguments ] { body; }
6,public function __construct[ arguments ] { body; }
7,public function __construct[ arguments ] { body; }
8 vàpublic function __construct[ arguments ] { body; }
9. Được gọi khi cố gắng truy cập một biến thành viên không khả dụng.public function __construct[ arguments ] { body; }
6 đượ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 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
4 và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
5. Đượ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 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
6. 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 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
71 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
8
[TODO] Ví dụ
Các hằng số ma thuật [
class { memberVariables; memberFunctions; }3 và
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 368], đượ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 24 25 26 27 28 29 30 31 32 33 34 35 36
4. tên lớp hiện tại trong chuỗi1 2 3 4 5 6 7 8 9 10 11
2. tên tệp hiện tại1 2 3 4 5 6 7 8 9 10 11
3. số dòng, được sử dụng cùng với1 2 3 4 5 6 7 8 9 10 11
21 2 3 4 5 6 7 8 9 10 11
5. thư mục tuyệt đối, giống như1 2 3 4 5 6 7 8 9 10 11
61 2 3 4 5 6 7 8 9 10 11
7 và1 2 3 4 5 6 7 8 9 10 11
8. tên hàm hoặc phương thức1 2 3 4 5 6 7 8 9 10 11
9. không gian tên hiện tại trong chuỗi
[TODO] Ví dụ
bản thân. , cha mẹ. và tĩnh
Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.0,
Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.1 và
Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.2 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 23 24 25 26 27 28 29 30 31 32 33 34 35 368 và
class { memberVariables; memberFunctions; }2 [
class { memberVariables; memberFunctions; }3 và
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 368] TRONG ĐỊNH NGHĨA lớp học.
Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.0 đề cập đến lớp hiện tại, như được minh họa trong ví dụ trên.
Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.1 đề cập đến lớp cha và
Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.2 đề cập đến lớp hiện tại nhưng có ràng buộc muộn - điều này 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
class { memberVariables; memberFunctions; }3
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 368 và
class { memberVariables; memberFunctions; }2 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 23 24 25 26 27 28 29 30 31 32 33 34 35 368, 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 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 23 24 25 26 27 28 29 30 31 32 33 34 35 368
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
Thí dụ. Các lớp MyCircle và MyCylinder
Hãy minh họa sự kế thừa củ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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2317bản thân và cha 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ể ghi đè 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ư sausau 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
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
Thấy
OOP hơn
đối tượng nhân bản
PHP cung cấp 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, từ khóa này thực hiện sao chép bóng. Nếu phương thức ma thuật
public function __construct[ arguments ] { body; }3 đượ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 119 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 119 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, một giao diện hoặc một 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 không giải quyết được, hàm/hằng sẽ quay trở lại không gian chung