Đây là một câu hỏi tuyệt vời và tôi đã thấy mọi người hỏi nó nhiều lần. Vì vậy, tôi sẽ cố gắng đơn giản hóa nó cho bạn, [phần giao diện cuối cùng].[interface part comes in the end].
Trước hết bạn không nhất thiết phải sử dụng OOP ở mọi nơi, hầu hết các mã cốt lõi WordPress được viết bằng PHP thủ tục [không chắc chắn về các bản dựng hiện tại] và nó không phải là điều xấu. Hầu hết các lần nó đơn giản hóa mọi thứ cho các lập trình viên mới, và đó là toàn bộ điểm sử dụng OOP i.e để thêm sự trừu tượng hóa sự trừu tượng, vì vậy khi lập trình viên đang làm việc trên một chức năng cụ thể, anh ta không phải lo lắng về các khía cạnh khác. Vì vậy, ví dụ nếu tôi muốn lưu trữ một hình ảnh từ mẫu đăng ký, tôi sẽ có 2 lớp. Một cho người dùng và một cho hình ảnh. Vì vậy, đây là cách nó sẽ trông như thế nào.
/*********** User Class ***********/
Class User
{
public function storeUser[$request, Image $image]
{
// Fetch Image from the form request and pass it to the
$image = $request->input['image'];
$image->uploadImage[$image, $imagePath];
// Now upload other user attributes
}
}
/ ********* Image Class **********/
Class Image
{
public function uploadImage[$image, $imagePath]{
// Code to UploadImage
}
}
Tôi thường có một lớp gọi là người dùng và một phương thức gọi là StoreUser trong đó, nơi tôi sẽ thêm người dùng vào cơ sở dữ liệu. Bây giờ tôi cũng sẽ có một lớp khác được gọi là hình ảnh với một phương thức gọi là uploadImage.
Bạn có thể đã làm điều tương tự với một chức năng cũng tốt, nhưng nếu bạn muốn một tính năng khác cho phép khi người dùng cập nhật hồ sơ của mình, xóa hình ảnh cũ và tải lên một tính năng mới. Đối với điều này, bạn sẽ phải bao gồm một chức năng khác, sẽ có tất cả các mã tải lên và một số mã khác để xóa hình ảnh trước đó.
Nhưng bây giờ bạn đang lặp lại chính mình, và tránh nguyên tắc khô [không lặp lại chính mình]. Nhưng hãy nói rằng bạn có một chức năng khác để DeleteUserImage sẽ xóa hình ảnh và sau đó gọi chức năng tải lên.. But lets say you have another function for deleteUserImage which would delete the image and then in turn call the upload function.
Vì vậy, nếu đây là những gì bạn đã nghĩ về việc làm, bạn thực sự đã sử dụng tiềm thức OOP, nhưng theo một cách rất lộn xộn, bởi vì một lớp chỉ là một tập hợp các chức năng và biến số. Nhưng bạn đang thiếu nhiều chức năng khác như phạm vi, tĩnh, một số thứ tuyệt vời khác và giá yêu thích của tôi này :]
Số lượng trừu tượng mà bạn thêm có thể phụ thuộc vào thời hạn, khả năng mở rộng trong tương lai, v.v. Bạn không cần phải hoàn toàn phát điên với sự trừu tượng, nhưng một quy tắc đơn giản là sự trừu tượng hơn mà bạn có mã của bạn dễ quản lý và linh hoạt hơn.
Hãy nói cho một lập luận rằng bạn đã tạo ứng dụng của mình trong PHP và MySQL và ra mắt nó, nhưng ứng dụng đã trở nên phổ biến sau đó bạn dự đoán. Và đột nhiên bạn có hàng triệu người dùng, nhưng máy chủ MySQL của bạn bằng cách nào đó không hỗ trợ số lượng người dùng khổng lồ này và bạn muốn chuyển sang cơ sở dữ liệu khác như Postgres hoặc Cassandra nhưng tất cả các truy vấn MySQL của bạn đều được trộn lẫn với mã PHP và không có Cách không đau để đạt được điều này nhưng để tạo ra mọi thứ từ đầu. Đây là một vấn đề phổ biến mà nhiều tổ chức khổng lồ đã thử nghiệm bao gồm Twitter và Facebook. Nhưng nếu bạn đã tạo ứng dụng của mình bằng trừu tượng, nơi tất cả các truy vấn của bạn đi trong một lớp, bộ điều khiển của bạn sẽ đi theo phương tiện khác. Tất cả những gì bạn phải làm chỉ là sửa đổi trình điều khiển và truy vấn trong một vài tệp và bạn sẽ bắt đầu sử dụng một cơ sở dữ liệu khác cùng nhau. And suddenly you have millions of users, but your mysql server is somehow not supporting this huge number of users and you want to shift to another database like postgres or cassandra but all your mysql queries are mixed up with the php code, and there is no painless way of achieving this but to create everything from scratch. This is a common problem that many huge organizations had experinced including twitter and facebook. But if you created your app with abstractions, where all your queries go in one class, your controllers go in another. All you would have to do is just modify the driver and queries in a few files and you will start using another database all together.
Bây giờ chúng ta hãy quay lại câu hỏi ban đầu về giao diện. Bạn có thể nghĩ rằng các giao diện chỉ là một sự lãng phí thời gian vì nó chỉ đơn giản là một danh sách tất cả các phương pháp mà bạn sẽ thực hiện trong lớp, phải không? Vâng, ít nhất là tôi khi tôi bắt đầu OOP. Nhưng hóa ra tôi thật ngu ngốc, bởi vì vào thời điểm đó, tôi không biết về các nguyên tắc vững chắc. You might think interfaces are just a waste of time because it is simply a list of all the methods that you are going to implement in the class, Right? Well atleast it seemed to me when i started OOP. But it turns out that i was stupid, because at the time, i didn't knew about the SOLID Principles.
Solid thực sự là một chữ viết tắt của 5 trong số các nguyên tắc tốt nhất từng được viết để lập trình và họ hỗ trợ lẫn nhau rất tốt. "O" trong các dấu hiệu rắn cho "nguyên tắc mở và đóng", và điều đó có nghĩa là phương pháp được đóng cho các thay đổi nhưng mở cho các phần mở rộng. Nói một cách đơn giản, điều đó có nghĩa là một khi bạn có một ứng dụng làm việc cơ bản, bạn không bao giờ nên sửa đổi các tham số phương thức hiện có mà bạn có trong giao diện của mình bởi vì nếu các tệp khác cũng đang sử dụng lớp đó, nó sẽ phá vỡ chúng. Và cách bạn thêm hạn chế là thông qua các giao diện. Vậy làm thế nào để bạn thêm một tính năng mới mà không cần sửa đổi phương thức? Vâng, bạn không trực tiếp sửa đổi một phương thức, bạn mở rộng nó. ever written for programming, and they support each other very well. "O" in the SOLID stands for "Open and Closed Principle", and what it means is that the method is Closed for changes but Open for Extensions. In simple words what that means is that once you have a basic working app, you should never modify the existing method parameters that you have in your interface because if other files are also using that class it would break them. And the way you add restriction to is through interfaces. So how do you add a new feature without modifying the method? well you dont directly modify a method, you extend it.
Thông qua việc triển khai các giao diện, người gọi của đối tượng chỉ quan tâm đến giao diện của đối tượng, chứ không phải việc triển khai các phương thức của đối tượng. Một giao diện trong PHP thiết lập một hợp đồng mà một lớp phải tuân thủ. Một giao diện là một bản thiết kế cho các lớp, giống như lớp PHP dành cho các đối tượng. Về những gì có thể được gọi, cách gọi nó và những gì sẽ được trả lại, bất kỳ lớp nào thực hiện một giao diện nhất định có thể được dự kiến sẽ hoạt động theo cùng một cách. Giao diện {// khai báo các trường không đổi // Các phương thức khai báo tóm tắt // theo mặc định. } Người dùng có thể xây dựng các chương trình bằng cách xác định các phương thức công khai mà một lớp phải thực hiện, mà không phải lo lắng về các sắc thái và chi tiết cụ thể về cách thực hiện các phương thức. Cấp độ trừu tượng tiếp theo là những gì nó được gọi là. Nó tương tự như các quy trình trừu tượng và các nhóm trừu tượng. Một giao diện được phân loại là một lớp, ngoại trừ từ khóa lớp được thay thế bằng từ khóa giao diện và chỉ các nguyên mẫu tính năng được xác định. Không có biến dữ liệu trong GUI. GUI đảm bảo rằng tất cả các phương pháp mà một lập trình viên muốn hoạt động được liệt kê theo một cách thích hợp. Các lập trình viên được hưởng lợi từ các giao diện theo nhiều cách khác nhau. & NBSP; Giao diện giúp hoàn thành mục tiêu: Chúng ta hãy xem xét một ví dụ về cách bạn có thể tạo giao diện trong PHP: Example: Giao diện trong PHP là gì?
Tạo một giao diện
Giao diện MyInterFacename {
& nbsp; & nbsp; & nbsp; & nbsp; Phương thức chức năng công khai1 [];
}
& nbsp; & nbsp; & nbsp; & nbsp; Phương thức chức năng công cộng2 [];
lớp myClassName thực hiện myInterfacename {
}
}
& nbsp; & nbsp; & nbsp; & nbsp; Phương thức chức năng công khai1 [] {
$obj->method1[];
$obj->method2[];
?>
Giao diện MyInterFacename {
& nbsp; & nbsp; & nbsp; & nbsp; Phương thức chức năng công khai1 [];
& nbsp; & nbsp; & nbsp; & nbsp; Phương thức chức năng công cộng2 [];
- lớp myClassName thực hiện myInterfacename {
- & nbsp; & nbsp; & nbsp; & nbsp; Phương thức chức năng công khai1 [] {
- & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "\N";
& nbsp; & nbsp; & nbsp; & nbsp; Phương thức chức năng công khai2 [] {
- & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "\N";
- $ obj = new myClassName;
- Đầu ra
- Đặc điểm của giao diện
- Sau đây là một số đặc điểm của giao diện trong PHP:
Các tính năng thú vị của giao diện PHP
- Một lớp không thể thực hiện hai giao diện có cùng tên phương thức, dẫn đến độ không đảm bảo của phương thức.
- Cùng một từ khóa "mở rộng" có thể được sử dụng để xác định mối quan hệ kế thừa giữa các giao diện và các lớp.
Ví dụ 1: & nbsp;
& nbsp;
Conclusion
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& nbsp;