CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này giới thiệu chi tiết về cách sử dụng các trait trong PHP, được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Nói một cách đơn giản hơn, từ khóa đặc điểm được sử dụng trong PHP để giải quyết vấn đề một lớp muốn tích hợp các thuộc tính và phương thức của một lớp cơ sở, nhưng cũng muốn có các phương thức của các lớp cơ sở khác và các đặc điểm thường được sử dụng kết hợp. với việc 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
|
đặc điểm Drive {
công cộng
$tênxe
=
'đặc điểm'
;
công cộng
chức năng
lái xe() {
tiếng vọng
"đang lái {$this->carName}\n"
;
}
}
lớp học
Người {
công cộng
chức năng
ăn() {
tiếng vọng
"ăn\n"
;
}
}
lớp học
Học sinh
mở rộng
Người {
sử dụng
Lái xe;
công cộng
chức năng
học() {
tiếng vọng
"nghiên cứu\n"
;
}
}
$sinh viên
=
mới
Học sinh();
$sinh viên
->học();
$sinh viên
->ăn();
$sinh viên
->lái xe();
?>
|
Đầu ra như sau:
Trong ví dụ trên, lớp Sinh viên có phương thức ăn bằng cách kế thừa Person, phương thức lái xe và thuộc tính carName bằng cách kết hợp Drive.
Nếu có một thuộc tính hoặc phương thức có cùng tên trong Trait, lớp cơ sở và lớp này thì cái nào cuối cùng sẽ được giữ lại?
?
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
|
đặc điểm Drive {
công cộng
chức năng
Xin chào() {
tiếng vọng
"Xin chào lái xe\n"
;
}
công cộng
chức năng
lái xe() {
tiếng vọng
"lái xe từ ổ đĩa\n"
;
}
}
lớp học
Người {
công cộng
chức năng
Xin chào() {
tiếng vọng
"Xin chào người\n"
;
}
công cộng
chức năng
lái xe() {
tiếng vọng
"lái xe từ người\n"
;
}
}
lớp học
Học sinh
mở rộng
Người {
sử dụng
Lái xe;
công cộng
chức năng
Xin chào() {
tiếng vọng
"Xin chào sinh viên\n"
;
}
}
$sinh viên
=
mới
Học sinh();
$sinh viên
->xin chào();
$sinh viên
->lái xe();
?>
|
Đầu ra như sau:
?
1
2
|
Xin chào sinh viên
lái xe từ ổ đĩa
|
Do đó, người ta kết luận rằng khi một phương thức hoặc thuộc tính có cùng tên, phương thức trong lớp hiện tại sẽ ghi đè phương thức của đặc điểm và phương thức của đặc điểm sẽ ghi đè phương thức trong lớp cơ sở.
Nếu bạn muốn kết hợp nhiều đặc điểm, hãy phân tách các tên đặc điểm bằng dấu phẩy:
Điều gì xảy ra nếu nhiều Đặc điểm chứa các phương thức hoặc thuộc tính có cùng tên? Câu trả lời là khi nhiều Trait kết hợp chứa các thuộc tính hoặc phương thức có cùng tên, chúng cần được khai báo rõ ràng để giải quyết xung đột, nếu không sẽ xảy ra lỗi nghiêm trọng.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
đặc điểm Đặc điểm 1 {
công cộng
chức năng
Xin chào() {
tiếng vọng
"Đặc điểm1::xin chào\n"
;
}
công cộng
chức năng
CHÀO() {
tiếng vọng
"Đặc điểm1::hi\n"
;
}
}
đặc điểm Đặc điểm 2 {
công cộng
chức năng
Xin chào() {
tiếng vọng
"Đặc điểm2::xin chào\n"
;
}
công cộng
chức năng
CHÀO() {
tiếng vọng
"Đặc điểm2::hi\n"
;
}
}
lớp học
Lớp 1 {
sử dụng
Đặc điểm1, Đặc điểm2;
}
?>
|
Đầu ra như sau:
。
Sao chép mã Mã này như sau:
Lỗi nghiêm trọng của PHP: Phương thức trait hello chưa được áp dụng vì có xung đột với các phương thức trait khác trên Class1 trong ~/php54/trait_3.php ở dòng 20
。
Sử dụng các toán tử thay thế và as để giải quyết xung đột. Thay vào đó sử dụng một phương thức để thay thế một phương thức khác, trong khi as cung cấp bí danh cho phương thức đó. Vui lòng xem mã để biết cách sử dụng cụ thể:
?
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
|
đặc điểm Đặc điểm 1 {
công cộng
chức năng
Xin chào() {
tiếng vọng
"Đặc điểm1::xin chào\n"
;
}
công cộng
chức năng
CHÀO() {
tiếng vọng
"Đặc điểm1::hi\n"
;
}
}
đặc điểm Đặc điểm 2 {
công cộng
chức năng
Xin chào() {
tiếng vọng
"Đặc điểm2::xin chào\n"
;
}
công cộng
chức năng
CHÀO() {
tiếng vọng
"Đặc điểm2::hi\n"
;
}
}
lớp học
Lớp 1 {
sử dụng
Đặc điểm 1, Đặc điểm 2 {
Trait2::hello thay vì Trait1;
Trait1::hi thay vì Trait2;
}
}
lớp học
Lớp 2 {
sử dụng
Đặc điểm 1, Đặc điểm 2 {
Trait2::hello thay vì Trait1;
Trait1::hi thay vì Trait2;
Đặc điểm2::vi
BẰNG
BẰNG;
Trait1::xin chào
BẰNG
Haha;
}
}
$Obj1
=
mới
Lớp 1();
$Obj1
->xin chào();
$Obj1
->xin chào();
tiếng vọng
"\N"
;
$Obj2
=
mới
Lớp 2();
$Obj2
->xin chào();
$Obj2
->xin chào();
$Obj2
->này();
$Obj2
->hehe();
?>
|
Đầu ra như sau:
?
1
2
3
4
5
6
7
|
Trait2::xin chào
Đặc điểm 1::xin chào
Trait2::xin chào
Đặc điểm 1::xin chào
Đặc điểm2::vi
Trait1::xin chào
|
Từ khóa as còn có một công dụng khác, đó là sửa đổi quyền kiểm soát truy cập của một phương thức:
Các đặc điểm cũng có thể được kết hợp với các đặc điểm hỗ trợ các phương thức trừu tượng, thuộc tính tĩnh và phương thức tĩnh như sau:
?
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
|
đặc điểm Xin chào {
công cộng
chức năng
sayXin chào() {
tiếng vọng
"Xin chào\n"
;
}
}
đặc điểm Thế giới {
sử dụng
Xin chào;
công cộng
chức năng
nóiWorld() {
tiếng vọng
"Thế giới\n"
;
}
tóm tắt
công cộng
chức năng
lấy Thế giới();
công cộng
chức năng
tăng() {
tĩnh
$c
= 0;
$c
=
$c
+ 1;
tiếng vọng
"$c\n"
;
}
công cộng
tĩnh
chức năng
làmCái gì đó() {
tiếng vọng
"Đang làm gì đó\n"
;
}
}
lớp học
Xin chào thế giới {
sử dụng
Thế giới;
công cộng
chức năng
lấy Thế giới() {
trở lại
'lấy thế giới'
;
}
}
$Đối tượng
=
mới
Xin chào thế giới();
$Đối tượng
->nóiXin chào();
$Đối tượng
->nóiThế Giới();
tiếng vọng
$Đối tượng
->getWorld() .
"\N"
;
Xin chào thế giới::doSomething();
$Đối tượng
->tăng();
$Đối tượng
->tăng();
?>
|
Đầu ra như sau:
?
1
2
3
4
5
6
|
Xin chào
Thế giới
nhận được thế giới
Làm gì đó
1
2
|
Trên đây là toàn bộ nội dung bài viết này hi vọng nó sẽ giúp ích cho việc học của mọi người và cũng mong mọi người ủng hộ mình.
Liên kết gốc: http://www.jianshu.com/p/36e854731341.
Cuối cùng, bài viết giới thiệu chi tiết về cách sử dụng các đặc điểm trong PHP kết thúc tại đây. Nếu bạn muốn biết thêm về phần giới thiệu chi tiết về việc sử dụng các đặc điểm trong PHP, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. bạn sẽ hỗ trợ nó trong tương lai blog của tôi! .
Tôi là một lập trình viên xuất sắc, rất giỏi!