__ được đặt trong PHP là gì?

Cho dù bạn là nhà phát triển PHP dày dạn kinh nghiệm hay người mới làm quen với việc phát triển PHP, nếu bạn đã làm việc với OOP trong PHP, thì bạn đã sử dụng ít nhất một vài phương thức kỳ diệu của PHP rồi. Tuy nhiên, nếu bạn chưa nghe nói về các phương thức ma thuật PHP, hãy để tôi giới thiệu chúng

Các tên hàm
    private $name;
09,
    private $name;
10,
    private $name;
11,
    private $name;
12,
    private $name;
13,
    private $name;
14,
    private $name;
15,
    private $name;
16,
    private $name;
17,
    private $name;
18,
    private $name;
19,
    private $name;
20,
    private $name;
21,
    private $name;
22 và
    private $name;
23 thật kỳ diệu trong các lớp học PHP. Bạn không thể có các chức năng với những tên này trong bất kỳ lớp nào của mình trừ khi bạn muốn chức năng kỳ diệu được liên kết với chúng. Tất cả các phương thức ma thuật PHẢI được khai báo là công khai

Nếu bạn thắc mắc tại sao các phương thức này được gọi là phương thức ma thuật, thì đó là bởi vì nếu bạn định nghĩa một trong các phương thức này trong lớp của mình, thì nó sẽ được gọi tự động và bạn chỉ cần xác định điều gì sẽ xảy ra bên trong nó. Ví dụ tốt nhất về một phương thức ma thuật là hàm

    private $name;
24, được gọi tự động khi đối tượng được khởi tạo

Nói chung, các phương thức ma thuật trong PHP cho phép bạn thực hiện nhiều loại thao tác khác nhau với các đối tượng. Chúng cũng cho phép bạn xử lý một số loại tình huống bằng cách điều khiển các đối tượng

Phương pháp ma thuật PHP

Mục đích của bài viết này là đi qua tất cả các phương thức kỳ diệu trong PHP và giải thích ngắn gọn từng phương thức

Phương pháp private $name; 24

Nếu bạn định nghĩa phương thức này trong lớp của mình, nó sẽ tự động được gọi khi một đối tượng được khởi tạo. Mục đích của phương thức này là gán một số giá trị mặc định cho thuộc tính đối tượng. Phương thức này còn được gọi là hàm tạo

Hãy xem một ví dụ nhanh để hiểu cách thức hoạt động của nó

1

2
class Student {
3
    private $name;
4
    private $email;
5
6

0

1

2

3

4

5

6

7

8

9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
class Student {
0
class Student {
1
class Student {
2
class Student {
3
class Student {
4

Trong ví dụ trên, khi bạn khởi tạo một đối tượng mới với

    private $name;
26
    private $name;
27
    private $name;
28, nó sẽ gọi phương thức
    private $name;
24 ngay từ đầu. Trong phương thức
    private $name;
24, chúng ta đã gán các giá trị được truyền trong các đối số cho các thuộc tính của đối tượng

Hãy nhớ rằng hàm tạo của lớp cha sẽ không được gọi ngầm nếu lớp con đã định nghĩa hàm tạo của chính nó

Phương pháp private $name; 31

Phương thức

    private $name;
31 được gọi là hàm hủy và nó được gọi khi đối tượng bị hủy. Nói chung, nó cũng được gọi khi tập lệnh bị dừng hoặc thoát. Mục đích của phương pháp này là tạo cơ hội lưu trạng thái đối tượng hoặc bất kỳ hoạt động dọn dẹp nào khác mà bạn muốn thực hiện

Hãy cùng xem ví dụ sau

1

2
class Student {
3
    private $name;
4
    private $email;
5
6

0

1

2

3

4

5

6

7

8

9
2
0
2
1
2
3
    private $name;
8
2
4

2
2
6
4
2
2
8
4
4
2
9
2
0
class Student {
1
2
2
class Student {
3
    private $email;
0
2
5
    private $email;
2
2
7
    private $email;
4
    private $email;
5
class Student {
0
    private $email;
7
class Student {
2
    private $email;
9
5
0
5
1
5
2
5
3
5
4
5
5
5
6
5
7
5
8
class Student {
4

Cũng giống như các hàm tạo, một phần tử con cũng có thể kế thừa hàm hủy của cha mẹ nếu nó không có phần triển khai của riêng nó.

Phương pháp private $name; 33

Phương thức ma thuật

    private $name;
33 được gọi khi bạn cố gắng đặt dữ liệu thành các thuộc tính đối tượng không thể truy cập hoặc không tồn tại. Mục đích của phương pháp này là thiết lập dữ liệu đối tượng bổ sung mà bạn chưa xác định rõ ràng các thuộc tính đối tượng

Hãy quay lại ví dụ của chúng tôi để hiểu cách thức hoạt động của nó

1

2
class Student {
3
6
5
4
5
6
8
6

2

1

02

3
2
0

5
2
2

7

9

09
2
1
2
3

12
2
4

14
2
6
class Student {
4

Như bạn có thể thấy trong ví dụ trên, chúng tôi đang cố gắng đặt thuộc tính

    private $name;
35 không tồn tại. Và do đó, phương thức
    private $name;
33 được gọi là. Đối số đầu tiên của phương thức
    private $name;
33 là tên của thuộc tính đang được truy cập và đối số thứ hai là giá trị chúng tôi đang cố đặt

Phương pháp private $name; 38

Trong trường hợp ví dụ về phương thức

    private $name;
33 trong phần trước, chúng ta đã thảo luận cách đặt giá trị cho các thuộc tính không tồn tại. Phương pháp
    private $name;
38 hoàn toàn ngược lại với nó. Phương thức ma thuật
    private $name;
38 được gọi khi bạn cố đọc dữ liệu từ các thuộc tính đối tượng không thể truy cập hoặc không tồn tại. Mục đích của phương pháp này là cung cấp các giá trị cho các thuộc tính đó

Hãy xem nó hoạt động như thế nào

1

2
class Student {
3
6
5
4
5
6
8
6

2

1

02

3
2
0

5

7

34

9

2
2
1

38
2
3

40
2
4

42
2
6
2
0
2
8
2
2
2
9
class Student {
1

09
class Student {
3
    private $email;
0

12
    private $email;
2

54
    private $email;
4
    private $email;
5

57
    private $email;
7

59
    private $email;
9

61
5
0
class Student {
4

Phương pháp private $name; 42 và private $name; 43

Nếu các phương thức

    private $name;
38 và
    private $name;
33 được gọi khi bạn đang xử lý các thuộc tính không tồn tại, thì phương thức
    private $name;
42 được gọi khi bạn đang cố gọi các phương thức không thể truy cập, các phương thức mà bạn chưa định nghĩa trong lớp của mình

1

2
class Student {
3

69
4
18_______2
5
18_______73
6

75

1
2
0

3
2
2

5

7

09_______18_______9_______18_______9_______18_______9_______1

Như bạn có thể thấy, chúng ta đã gọi phương thức là

    private $name;
47, phương thức này không được định nghĩa, và do đó, phương thức ma thuật
    private $name;
42 được gọi là. Đối số đầu tiên là tên của phương thức được gọi và đối số thứ hai là một mảng các đối số được truyền trong phương thức đó

Phương thức

    private $name;
43 rất giống với phương thức
    private $name;
42. Ngoại lệ duy nhất là nó được gọi khi bạn đang cố gọi các phương thức không thể truy cập trong ngữ cảnh tĩnh. Vì vậy, nếu bạn đang cố truy cập bất kỳ phương thức tĩnh nào chưa được xác định, thì hàm
    private $name;
43 sẽ được gọi

Sau khi đọc về các phương pháp

    private $name;
38,
    private $name;
33 và
    private $name;
42, một số bạn đang suy nghĩ về việc sử dụng chúng để quản lý tất cả các thành viên và phương pháp của lớp học. Chỉ cần cố gắng tránh đặt nhiều mã của bạn vào chúng. Việc có các định nghĩa phương thức rõ ràng để nhận và thiết lập các thành viên hoặc định nghĩa các phương thức lớp thường tốt hơn cho khả năng đọc và bảo trì.

Phương pháp private $name; 55 và private $name; 56

Phương thức ma thuật

    private $name;
55 được gọi khi bạn gọi phương thức
    private $name;
58 trên các thuộc tính đối tượng không thể truy cập hoặc không tồn tại. Hãy xem cách nó hoạt động thông qua một ví dụ

1

2
class Student {
___
3
6
5
4
25_______18_______95
6
18_______2

1

99

3
2
0

5
2
2

7

9_______18_______19_______0_______19_______019_______ 48

Trong ví dụ trên, thuộc tính phone không được định nghĩa trong lớp và do đó, nó sẽ gọi phương thức

    private $name;
55

Mặt khác,

    private $name;
56 là một phương thức được gọi khi bạn gọi phương thức
    private $name;
61 trên các thuộc tính đối tượng không thể truy cập hoặc không tồn tại

Phương pháp private $name; 62

Phương thức ma thuật

    private $name;
62 cho phép bạn xác định những gì bạn muốn hiển thị khi một đối tượng của lớp được xử lý như một chuỗi. Nếu bạn sử dụng
    private $name;
64 hoặc
    private $name;
65 trên đối tượng của mình và bạn chưa xác định phương thức
    private $name;
62, nó sẽ báo lỗi

Hãy cố gắng hiểu nó với ví dụ sau

1

2
class Student {
3
    private $name;
4
    private $email;
5
6

0

1

2

3

6

5

8

7
2
0

9
2
1
2
32
2
3

2
2
4
2
36
2
6
2
38
2
8
2
40
2
9
2
0
class Student {
1
2
2
class Student {
3
    private $email;
0
2
47
    private $email;
2
2
49
    private $email;
4
class Student {
4

Trong ví dụ trên, khi bạn lặp lại đối tượng

    private $name;
67, nó sẽ gọi phương thức
    private $name;
62. Trong phương pháp đó, bạn có thể quyết định những gì bạn muốn hiển thị. Nếu bạn chưa định nghĩa phương thức
    private $name;
62, điều này sẽ dẫn đến lỗi

Phương pháp private $name; 70 và private $name; 71

Phương pháp ma thuật

    private $name;
70 khác so với các phương pháp mà chúng ta đã thảo luận cho đến nay. Nó được gọi khi bạn gọi hàm
    private $name;
73 trên đối tượng. Trong trường hợp đối tượng rất lớn, bạn chỉ muốn lưu các thuộc tính đã chọn trong quá trình tuần tự hóa và dọn dẹp đối tượng. Phương thức
    private $name;
70 phải trả về một mảng có tên của tất cả các thuộc tính của đối tượng sẽ được tuần tự hóa

Một lần nữa, hãy sửa lại ví dụ của chúng tôi để xem nó hoạt động như thế nào

1

2
class Student {
3
    private $name;
4
    private $email;
5
2
61
6
2
63

1

3
2
66

5

2

7

6

9

8
2
1
2
74
2
3
2
0
2
4
2
6
2
79
2
8

2
2
9
2
83
class Student {
1
2
0
class Student {
3
    private $email;
0
2
88
    private $email;
2

2
    private $email;
4
2
92
    private $email;
5
2
0
    private $email;
7
2
2
    private $email;
9
class Student {
4

Trong ví dụ trên, khi bạn

    private $name;
73 đối tượng
    private $name;
76, nó sẽ gọi phương thức
    private $name;
70 và nó sẽ chỉ bảo toàn các giá trị của các biến
    private $name;
78,
    private $name;
79 và
    private $name;
35

Mặt khác, việc sử dụng phương pháp ma thuật

    private $name;
71 là để thiết lập lại bất kỳ kết nối nào và khởi động các tác vụ khi hàm
    private $name;
82 được gọi trên đối tượng

Phương pháp private $name; 83 và private $name; 84

Hai phương thức ma thuật mới có tên là

    private $name;
83 và
    private $name;
84 đã được giới thiệu trong PHP 7. 4. Về nhiều mặt, chúng giống với phương pháp
    private $name;
70 và
    private $name;
71, nhưng chúng giúp chúng ta khắc phục một số hạn chế của cả hai phương pháp này. Chẳng hạn, việc tạo một biểu diễn được tuần tự hóa của một đối tượng khác với dạng trong bộ nhớ của đối tượng sẽ khó khăn với
    private $name;
70 và yêu cầu sử dụng các thuộc tính giả

1

2
class Student {
3
    private $name;
4
    private $email;
5
2
61
6
2
63

1

3
2
66

5

2

7

6

9

8
2
1
2
74
2
3
2
0
2
4
2
6
class Student {
26
2
8

2
2
9
class Student {
30
class Student {
1
2
0
class Student {
3
    private $email;
0
class Student {
35
    private $email;
2

2
    private $email;
4
class Student {
39
    private $email;
5
class Student {
41
    private $email;
7
class Student {
43
    private $email;
9
class Student {
45
5
0
2
92
5
2
2
0
5
4
2
2
5
6
class Student {
4

Cũng cần lưu ý rằng chỉ

    private $name;
83 được gọi khi bạn đã xác định cả
    private $name;
83 và
    private $name;
70 cho một đối tượng. Tương tự, chỉ
    private $name;
84 được gọi khi bạn đã xác định cả
    private $name;
84 và
    private $name;
71 cho một đối tượng

Phương pháp private $name; 96

Phương thức ma thuật

    private $name;
96 là một phương thức đặc biệt được gọi khi bạn cố gắng gọi một đối tượng như thể nó là một hàm. Đầu tiên, hãy xem nó hoạt động như thế nào, sau đó chúng ta sẽ xem mục đích của phương pháp kỳ diệu này

1

2
class Student {
3
    private $name;
4
    private $email;
5
6

0

1

2

3

6

5

8

7
2
0

9
2
1
class Student {
75
2
3

2
2
4
class Student {
79
2
6
2
0
2
8
2
2
2
9
class Student {
1
2
47
class Student {
3
class Student {
88
    private $email;
0
class Student {
4

Như bạn có thể thấy, đối tượng

    private $name;
67 được xử lý như thể nó là một hàm và như chúng ta đã định nghĩa phương thức
    private $name;
96, nó sẽ được gọi thay vì báo lỗi cho bạn. Mục đích chính của phương thức
    private $name;
96 là nếu bạn muốn coi các đối tượng của mình là có thể gọi được, bạn có thể triển khai phương thức này

Phương pháp 401

Nếu bạn muốn sao chép một đối tượng hiện có, bạn có thể sử dụng từ khóa

4
02 để làm điều đó. Nhưng sau khi sao chép, nếu bạn muốn sửa đổi các thuộc tính của đối tượng được sao chép, bạn có thể định nghĩa phương thức ma thuật
4
01 trong lớp của mình

1

2
class Student {
94
3
2
2
4
5
class Student {
6
    private $name;

1
    private $email;

3
3
05

5

7
3
08

9

2
2
1
3
12
2
3
2
0
2
4
2
6
3
17
2
8

2
2
9
3
21
class Student {
1
2
0
class Student {
3
2
2
    private $email;
0
    private $email;
2
3
28
    private $email;
4
3
30
    private $email;
5
class Student {
4

Vấn đề với cách tiếp cận trên là nó tạo một bản sao nông của đối tượng trong khi sao chép và do đó các đối tượng bên trong của đối tượng được sao chép sẽ không được sao chép

Trong ngữ cảnh của ví dụ trên, nếu bạn chưa định nghĩa phương thức

4
01, thì đối tượng nhân bản,
4
05, vẫn sẽ trỏ đến cùng một đối tượng
4
06 được tham chiếu bởi đối tượng
4
07. Do đó, bằng cách triển khai phương thức
4
01, chúng tôi đảm bảo rằng đối tượng
4
06 được sao chép cùng với đối tượng chính

Phương pháp 410

Phương thức ma thuật

4
10 được gọi khi bạn cố kết xuất một đối tượng bằng cách sử dụng hàm
4
12. Nếu bạn chưa định nghĩa phương thức này trong lớp của mình, nó sẽ kết xuất tất cả các thuộc tính công khai, riêng tư và được bảo vệ. Vì vậy, nếu bạn muốn hạn chế thông tin được hiển thị trong khi kết xuất, bạn có thể sử dụng phương pháp này

1

2
class Student {
3
3
38
4
    private $email;
5
3
42
6

1
3
45

3

2

5
3
49

7
2
0

9
2
2
2
1
2
3

09
2
4
3
58
2
6
3
60
2
8
class Student {
4

Phương thức này sẽ trả về một mảng gồm các cặp khóa-giá trị sẽ được hiển thị khi hàm

4
12 được gọi trên đối tượng. Như bạn có thể thấy, bạn hoàn toàn có thể kiểm soát những gì bạn muốn hiển thị khi đổ đối tượng bằng hàm
4
12

Phương pháp 415

Phương thức

4
15 là một phương thức tĩnh được sử dụng cùng với hàm
4
17. Hàm
4
17 xuất thông tin có cấu trúc về một biến. Khi bạn sử dụng chức năng này để xuất các lớp, bạn cần xác định phương thức
4
15 trong lớp của mình

1

2
class Student {
3
3
38
4
3
70
5
6

0

1

2

3

6

5

8

7
2
0

9
2
1
3
84
2
3

2
2
4
3
88
2
6
3
90
2
8
3
92
2
9
class Student {
1
3
95
class Student {
3
2
0
    private $email;
0
2
2
    private $email;
2
    private $email;
4
    private $name;
02
    private $email;
5
    private $name;
04
    private $email;
7
    private $name;
06
    private $email;
9
class Student {
4

Như bạn có thể thấy, chuỗi đã xuất là mã PHP hợp lệ và bạn có thể sử dụng nó để khôi phục đối tượng ban đầu

Phần kết luận

Trong bài viết này, chúng ta đã đi qua tất cả các phương thức kỳ diệu có sẵn trong PHP. Đối với mọi phương pháp, tôi đã cung cấp một ví dụ ngắn nhưng có ý nghĩa để giúp bạn hiểu mục đích của nó. Và tôi hy vọng bạn có thể sử dụng bài viết này như một tài liệu tham khảo nhanh hoặc một bảng hướng dẫn trong quá trình phát triển PHP hàng ngày của bạn

Bài đăng này đã được cập nhật với sự đóng góp từ Monty Shokeen. Monty là một nhà phát triển full-stack, người cũng thích viết hướng dẫn và tìm hiểu về các thư viện JavaScript mới

Việc sử dụng __ get trong PHP là gì?

__get() được sử dụng để đọc dữ liệu từ các thuộc tính không thể truy cập .

Phương thức thiết lập trong PHP là gì?

Hàm isset() trong PHP. Hàm isset() là một hàm có sẵn của PHP, dùng để xác định một biến có được đặt hay không. Nếu một biến được coi là set, nghĩa là biến đó được khai báo và có giá trị khác NULL

__ phương thức __ trong PHP là gì?

__FUNCTION__ và __METHOD__ như trong PHP 5. 0. 4 là vậy. __FUNCTION__ chỉ trả về tên của hàm. trong khi __METHOD__ trả về tên của lớp cùng với tên của hàm .

__ cuộc gọi () trong PHP là gì?

__call() được kích hoạt khi gọi các phương thức không thể truy cập trong ngữ cảnh đối tượng . __callStatic() được kích hoạt khi gọi các phương thức không thể truy cập trong ngữ cảnh tĩnh. Đối số $name là tên của phương thức được gọi.