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 PHP học hướng đối tượng - parent:: được tác giả sưu tầm và sắp xếp. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Lời nói đầu.
Gần đây, tôi đã sử dụng từ khóa parent:: trong một dự án phát triển THINKPHP. Trên thực tế, từ khóa parent:: là một hàm thường được sử dụng trong PHP. Điều này không chỉ được sử dụng trong phát triển dự án THINKPHP, ngay cả đối với một trang web doanh nghiệp nhỏ. , cũng sẽ có nhiều hàm giống nhau, chúng ta có thể gói gọn chúng vào một lớp cha, sau đó nhiều lớp con kế thừa trực tiếp phần chung của lớp cha.
Trong PHP5, parent:: được sử dụng để tham chiếu các phương thức của lớp cha.
parent:: có thể được sử dụng để gọi các phương thức thành viên được xác định trong lớp cha.
parent:: truy ngược lại lớp cha mẹ trực tiếp.
Gọi phương thức lớp cha thông qua parent::.
?
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
|
lớp học
người lao động{
được bảo vệ
$ sẽ
=3000;
công cộng
chức năng
lấy Sal(){
$cái này
->sal =
$cái này
->sal + 1200;
trở lại
$cái này
->sal ;
}
}
lớp học
Giám đốc
mở rộng
người lao động {
công cộng
chức năng
lấy Sal(){
cha mẹ::getSal();
$cái này
->sal =
$cái này
->sal + 1500;
trở lại
$cái này
->sal ;
}
}
$emp
=
mới
người lao động();
tiếng vọng
"Mức lương của một nhân viên bình thường là"
.
$emp
->getSal();
tiếng vọng
" "
;
$quản lý
=
mới
Giám đốc();
tiếng vọng
"Mức lương của người quản lý là:"
.
$quản lý
->getSal();
?>
|
Kết quả chạy chương trình:
Mức lương của nhân viên bình thường là 4200.
Lương của người quản lý là: 5700.
Thuộc tính riêng của lớp cha.
Chuyện này rất khó giải thích.
Thuộc tính riêng tư không thể được kế thừa nếu lớp cha có thuộc tính riêng tư. Khi đó các phương thức của lớp cha chỉ phục vụ các thuộc tính riêng của lớp cha.
Ví dụ sau có vẻ lạ. Một thuộc tính $sal được xác định lại trong lớp con, nhưng hệ thống trả về thuộc tính 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
23
24
|
lớp học
người lao động{
riêng tư
$ sẽ
=3000;
công cộng
chức năng
lấy Sal(){
trở lại
$cái này
->sal;
}
}
lớp học
Giám đốc
mở rộng
người lao động {
được bảo vệ
$ sẽ
=5000;
công cộng
chức năng
getParentSal(){
trở lại
cha mẹ::getSal();
}
}
$quản lý
=
mới
Giám đốc();
tiếng vọng
"PHP"
.phpversion().
" "
;
tiếng vọng
$quản lý
->getSal();
tiếng vọng
" "
;
tiếng vọng
"của cha mẹ \$sal "
.
$quản lý
->getParentSal();
?>
|
Kết quả chạy chương trình:
Phiên bản PHP 5.2.9
3000 。
tiền lương của cha mẹ là 3000 đô la.
Nếu các thuộc tính của lớp cha bị lớp con ghi đè. Kết quả là thế này. Lưu ý rằng định nghĩa thuộc tính ở dòng 5 sẽ được bảo 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
|
lớp học
người lao động{
được bảo vệ
$ sẽ
=3000;
công cộng
chức năng
lấy Sal(){
trở lại
$cái này
->sal;
}
}
lớp học
Giám đốc
mở rộng
người lao động {
được bảo vệ
$ sẽ
=5000;
công cộng
chức năng
getParentSal(){
trở lại
cha mẹ::getSal();
}
}
$quản lý
=
mới
Giám đốc();
tiếng vọng
"PHP"
.phpversion().
" "
;
tiếng vọng
$quản lý
->getSal();
tiếng vọng
" "
;
tiếng vọng
"của cha mẹ \$sal "
.
$quản lý
->getParentSal();
?>
|
Kết quả chạy chương trình:
Phiên bản PHP 5.2.9
5000 。
tiền lương của cha mẹ là 5000 đô la.
Các phương thức được ghi đè trong các lớp con vẫn hợp lệ cho lớp riêng tư hiện tạ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
|
lớp học
người lao động{
riêng tư
$ sẽ
=3000;
công cộng
chức năng
lấy Sal(){
trở lại
$cái này
->sal;
}
}
lớp học
Giám đốc
mở rộng
người lao động {
riêng tư
$ sẽ
=5000;
công cộng
chức năng
lấy Sal(){
trở lại
$cái này
->sal;
}
công cộng
chức năng
getParentSal(){
trở lại
cha mẹ::getSal();
}
}
$quản lý
=
mới
Giám đốc();
tiếng vọng
"PHP"
.phpversion().
" "
;
tiếng vọng
$quản lý
->getSal();
tiếng vọng
" "
;
tiếng vọng
"của cha mẹ \$sal "
.
$quản lý
->getParentSal();
?>
|
Kết quả chạy chương trình:
Phiên bản PHP 5.2.9
5000 。
tiền lương của cha mẹ là 3000 đô la.
Bật trạng thái gỡ lỗi zend để xem điều gì đang diễn ra trong bộ nhớ. Lưu ý rằng có hai $sal ở phía dưới. Chúng lần lượt là 3000 và 5000.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
lớp học
người lao động{
riêng tư
$ sẽ
=3000;
công cộng
chức năng
lấy Sal(){
trở lại
$cái này
->sal;
}
}
lớp học
Giám đốc
mở rộng
người lao động {
được bảo vệ
$ sẽ
=5000;
công cộng
chức năng
getParentSal(){
trở lại
$cái này
->sal;
}
}
$quản lý
=
mới
Giám đốc();
tiếng vọng
"PHP"
.phpversion().
" "
;
tiếng vọng
$quản lý
->getSal();
?>
|
Kết quả chạy chương trình:
Phiên bản PHP 5.2.9
3000 。
Thay đổi thuộc tính $sal của lớp cha thành protected và lớp con sẽ ghi đè các thuộc tính của lớp cha. Chỉ có một $sal trong bộ nhớ.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
lớp học
người lao động{
được bảo vệ
$ sẽ
=3000;
công cộng
chức năng
lấy Sal(){
trở lại
$cái này
->sal;
}
}
lớp học
Giám đốc
mở rộng
người lao động {
được bảo vệ
$ sẽ
=5000;
công cộng
chức năng
getParentSal(){
trở lại
$cái này
->sal;
}
}
$quản lý
=
mới
Giám đốc();
tiếng vọng
"PHP"
.phpversion().
" "
;
tiếng vọng
$quản lý
->getSal();
?>
|
Kết quả chạy chương trình:
Phiên bản PHP 5.2.9
5000 。
Nếu bạn đã học Java, bạn sẽ thấy điều này thật khó hiểu.
Trong Java khi một lớp con được tạo, các thuộc tính và phương thức của lớp cha cũng được tạo trong bộ nhớ và thậm chí cả hàm tạo cũng được gọi.
Điều này không xảy ra với PHP5. PHP5 sử dụng parent:: thay vì parent-> để gọi lớp cha. Điều này đủ để cho thấy rằng PHP5 không muốn lớp cha được tạo trong bộ nhớ. PHP5 muốn việc kế thừa đơn giản hơn Java.
Chỉ cần làm quen với nó.
Lệnh gọi như vậy sẽ khiến PHP5.1.1 bị tràn. Không biết phiên bản mới có vấn đề gì không.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
lớp học
người lao động{
riêng tư
$ sẽ
=3000;
công cộng
chức năng
lấy Sal(){
trở lại
cha mẹ::
$cái này
->sal;
}
}
lớp học
Giám đốc
mở rộng
người lao động {
được bảo vệ
$ sẽ
=5000;
công cộng
chức năng
lấy Sal(){
trở lại
cha mẹ::
$cái này
->getSal();
}
}
$quản lý
=
mới
Giám đốc();
tiếng vọng
"PHP"
.phpversion().
" "
;
tiếng vọng
$quản lý
->getSal();
?>
|
Chỉ cần thay đổi dòng 12 thành thế này. Hãy chú ý đến sự so sánh.
trả về parent:: getSal(),
Mã như vậy gây ra đệ quy, với các phương thức gọi lớp con của lớp cha và các phương thức gọi lớp cha của lớp con.
trả về parent::$this->getSal(),
Tóm tắt.
Trên đây là toàn bộ nội dung bài viết này hy vọng nội dung bài viết có thể mang lại sự giúp đỡ nào đó cho việc học tập hoặc làm việc của mọi người. Nếu có thắc mắc gì có thể để lại tin nhắn để trao đổi.
Cuối cùng, bài viết về parent::keyword trong học tập hướng đối tượng PHP kết thúc ở đây. Nếu bạn muốn biết thêm về parent::keyword trong học tập hướng đối tượng PHP, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!