PHP Traits về cơ bản là một cơ chế để “sao chép/dán” mã trong khi nó đang chạy. Nó chỉ là một tập hợp các thủ tục mà bạn có thể sử dụng trong một lớp khác. Các đặc điểm, như các lớp trừu tượng, không thể tự xây dựng
Điều này có nghĩa là đặc điểm được sao chép vào các lớp con Bài đăng và Nhận xét để khi bạn tạo một trường hợp mới, nó sẽ kế thừa đặc điểm đó
Kết quả là, bạn có thể loại bỏ sự trùng lặp mã trong khi giảm thiểu các vấn đề liên quan đến việc kế thừa nhiều
– Đặc điểm PHP. Các tính năng của một Trait
- Các đặc điểm được sử dụng để xác định hoặc xây dựng các chức năng có thể được sử dụng lại giữa các lớp
- Các đặc điểm hỗ trợ các thủ tục trừu tượng
- Công cụ sửa đổi truy cập cũng có thể được áp dụng cho các đặc điểm
- Thuật ngữ “sử dụng” được sử dụng để xác định các đặc điểm trong các lớp
Đặc điểm PHP. Nhiều đặc điểm kế thừa
Một lớp có thể sử dụng nhiều đặc điểm. Trong lớp IDE, ví dụ sau cho thấy cách sử dụng một số đặc điểm
Đối với mục đích trình diễn, nó mô phỏng mô hình biên dịch C trong PHP
– Di truyền nhiều tính trạng. Cách tạo một ví dụ thay thế
Chúng ta có thể sử dụng ví dụ trên để xây dựng một ví dụ thay thế
- Để bắt đầu, xác định phẩm chất của một giáo viên và một học sinh
- Thứ hai, tạo một Đặc điểm mới có tên là Máy in, được tạo thành từ các thuộc tính của giáo viên và học sinh
- Sử dụng học sinh read[] và của giáo viên write[] methods in the Printer Trait’s copy[] method.
- Sử dụng Đặc điểm máy in trong phương thức sao chép file[] của lớp FileUtil để bắt chước một bản sao tệp.
- Quá trình giải quyết xung đột trong PHP Traits được gọi là quản lý xung đột
Hàm log[] giống nhau cho cả FileLogger and DatabaseLogger characteristics.
Bạn có thể khắc phục xung đột tên phương thức trong lớp Logger bằng cách chỉ ra rằng phương thức log[] của FileLogger Trait sẽ được sử dụng thay vì Database Logger
Còn trường hợp bạn sử dụng cả hai kỹ thuật log[] của đặc điểm FileLogger và DatabaseLogger thì sao?
Phương thức phải được triển khai bởi tất cả các lớp sử dụng Đặc điểm này. Thay vào đó, PHP sẽ đưa ra một lỗi cho biết rằng một phương thức trừu tượng PHP Trait bị thiếu trong mã
Xây dựng đặc điểm PHP
Các đặc điểm trong PHP, không giống như Scala, có thể có một hàm tạo đặc điểm PHP. Tuy nhiên, chúng phải được thông báo công khai – một lỗi sẽ được đưa ra nếu nó là riêng tư hoặc được bảo vệ
Mặt khác, nên tránh sử dụng hàm tạo đặc điểm PHP trong các đặc điểm vì nó có thể tạo ra các xung đột không mong muốn trong các lớp soạn thảo
Một cách giải quyết ở đây là sử dụng các lớp đặc điểm như Mixin và bạn sẽ có thể cắt giảm việc sao chép mã
Đặc điểm PHP. Điều gì phân biệt các đặc điểm từ các lớp trừu tượng?
Một đặc điểm trừu tượng của PHP không dựa trên tính kế thừa, so với một lớp trừu tượng. Xem xét điều gì sẽ xảy ra nếu các lớp Bài đăng và Nhận xét phải được dẫn xuất từ một đối tượng AbstractSocial.
Chúng tôi gần như chắc chắn sẽ muốn làm điều gì đó hơn là xuất bản nhận xét và bài đăng trên các nền tảng truyền thông xã hội, vì vậy cuối cùng chúng tôi sẽ kết thúc với nội dung như thế này
Nguồn gốc phức tạp này không chỉ khó chịu mà còn tăng thêm độ phức tạp khi một đối tượng đơn giản hơn thiếu cấu trúc kế thừa tương tự
Chẳng hạn, nếu tất cả chúng ta đều có một lớp Massage không hỗ trợ tương tác xã hội, thì chúng ta cần một cây kế thừa hơi khác cho mục đó
Điều gì phân biệt các đặc điểm từ các giao diện?
Các đặc điểm giống với giao diện theo phong cách. Không có lớp xác định, cả đặc điểm và giao diện thường đơn giản, ngắn gọn và ít tiện ích. Tuy nhiên, sự khác biệt giữa hai là rất quan trọng
Một giao diện giống như một lời hứa nói rằng, “đối tượng này có thể thực hiện hành động này”, trong khi một đặc điểm là khả năng hoàn thành công việc
Xem xét tình huống sau
giao diện Người{
public function welcome[];
public function eat[$food];putInMouth[$food];
}
private function putInMouth[$food]
{
// digest delicious food
}
}
Ưu điểm của việc có đặc điểm là gì?
Các đặc điểm có lợi thế là giảm trùng lặp mã đồng thời tránh thừa kế lớp phức tạp có thể đúng hoặc không đúng trong ứng dụng của bạn
Đặc điểm PHP. Nhược điểm của nó là gì?
Có một số nhược điểm khi sử dụng các đặc điểm là tốt
Khá đơn giản để tạo các lớp cồng kềnh với quá nhiều trách nhiệm vì các đặc điểm. Một đặc điểm về cơ bản là một cơ chế để “dán” mã từ loại này sang loại khác
Khá dễ dàng để đi chệch khỏi khái niệm trách nhiệm duy nhất bằng cách nhanh chóng thêm một tập hợp các phương thức khác vào một lớp
Các nhược điểm khác của việc sử dụng các đặc điểm bao gồm không nhìn thấy tất cả các phương thức của lớp khi xem mã nguồn, xung đột phương thức và lặp lại logic
Đặc điểm PHP Các trường hợp sử dụng. Các tình huống phổ biến
Vì vậy, điều gì có thể là một kịch bản cổ điển trong đó việc sử dụng một Đặc điểm sẽ có lợi?
Theo chúng tôi, các đặc điểm là một kỹ thuật tuyệt vời để sử dụng lại mã giữa một lớp gồm các lớp con có liên quan không nên kế thừa từ cùng một kiểu dữ liệu trừu tượng
– Kịch bản chung đầu tiên
Giả sử chúng ta có một ứng dụng xã hội và giả sử chúng ta có các đối tượng để
- Băng hình
- Bình luận
- Chữ
- Thẩm quyền giải quyết
Theo nghĩa nhất, những đối tượng này có thể thay thế được trong hệ thống của chúng tôi vì chúng thường được tạo và liên kết với những người khác nhau
Mặt khác, các đối tượng tin nhắn là các tin nhắn riêng tư không được công khai, trong khi Bài đăng, Ảnh, Ghi chú và Liên kết đều là các đối tượng trực tuyến được chia sẻ giữa các cá nhân
Khi bạn lần đầu tiên tìm hiểu về các đặc điểm như một công cụ tùy ý sử dụng, có thể khó xác định liệu một tình huống có bắt buộc phải sử dụng một đặc điểm hay không, một trong nhiều cách khắc phục khả thi khác
Chúng tôi nghĩ rằng đây là cơ hội tốt để kiểm tra xem những người khác đã sử dụng chiến lược này như thế nào trong cộng đồng Nguồn mở khi bạn ở trong trường hợp này
– Kịch bản chung thứ hai
Gói Thu ngân của Laravel, theo quan điểm của chúng tôi, là một dự án Nguồn mở sử dụng tốt các đặc điểm
Gói Thu ngân mở rộng khả năng của các bộ phận Eloquent của bạn để dễ dàng quản lý đăng ký trong doanh nghiệp SaaS của bạn
Một giải pháp khác là sửa đổi đối tượng Thu ngân để bạn có thể kế thừa các phương thức bạn muốn. Đây cũng là một lựa chọn tồi nếu bạn muốn giới thiệu các phương thức xác thực từ một gói cho các mô hình của mình?
Khi bạn, đồng nghiệp của bạn hoặc bản thân trong tương lai của bạn quay lại mã này trong tương lai, bạn sẽ có một lịch sử thừa kế rối rắm khiến nó trở nên cồng kềnh và rối rắm
Mô-đun Verification cho Eloquent của Laravel cũng sử dụng đặc điểm một cách tuyệt vời. Bằng cách kết hợp một đặc điểm trong gói này, bạn có thể phát triển các mẫu xác thực tự động
Phương pháp ghi đè đặc điểm PHP
Khi có một đặc điểm PHP và một lớp sử dụng nó, chúng tôi chọn gọi phương thức của đặc điểm ban đầu cũng như ghi đè phương thức của một đặc điểm
Chúng ta sẽ phải làm cái này như thế nào?
Vì một từ khóa có thể được sử dụng để đổi tên phương thức của một đặc điểm, chúng tôi cũng có thể điều chỉnh tính khả dụng của nó để làm cho nó ẩn trong mạng công cộng của lớp
Tính toán các đặc điểm mở rộng và ghi đè trong thủ tục PHP. Việc sử dụng các đặc điểm của PHP để chia sẻ các thủ tục giữa các lớp rất thuận tiện
Tuy nhiên, có những lúc chúng ta cần mở rộng hoặc ghi đè một kỹ thuật được khai báo trong một đặc điểm được kết nối với một lớp
– PHP Override Trait Method Ví dụ
TraitA {function calc[$v] {
return $v+1;
}}}}}}}}}}}
}
class MyClass
{ use A
{ calc as protected Traitcalc; }
function calc[$v] {
$v++;
return $this->Traitcalc[$v];
}
}
Đặc điểm PHP. Các vấn đề với việc khai báo nhiều đặc điểm trong một lớp
Nhiều đặc điểm có thể được khai báo trong một lớp. Giải pháp đầu tiên là chỉ sao chép và dán các trường hợp hàm từ hướng dẫn để tự xây dựng các phương thức
Đây không phải là một cách tiếp cận thông minh vì bạn có nguy cơ gây ra lỗi do sao chép mã không đúng cách và bạn sẽ phải xem qua tất cả các đối tượng của mình và thay thế mã đã sao chép mỗi khi gói máy in được cập nhật
Một giải pháp khác là sửa đổi đối tượng máy in để bạn có thể kế thừa các phương thức bạn yêu cầu
Đây cũng là một lựa chọn tồi, vì nếu bạn muốn kết hợp các phương thức xác thực từ một gói vào các mô hình của mình thì sao?
Khi bạn, đồng nghiệp hoặc fuzz của bạn tạo ra một dòng thừa kế phức tạp, mã của bạn sẽ trở nên cồng kềnh và rối rắm
Phần kết luận
Mặc dù một Đặc điểm có thể khắc phục khó khăn hiện tại trong mã của bạn, nhưng bố cục có thể là giải pháp thực sự cho vấn đề của bạn. Trong mọi trường hợp, bạn nên ghi lại những điều quan trọng mà chúng tôi đã thảo luận trong bài viết của chúng tôi cũng có thể giúp ích cho bạn
- Đặc điểm PHP cung cấp cho bạn khả năng sao chép và dán các phần mã trong khi mã đang chạy
- Một lớp có thể có nhiều Đặc điểm PHP trong đó
- Bạn phải thông báo công khai các Đặc điểm PHP nếu bạn đang sử dụng Trình xây dựng Đặc điểm PHP
- Có thể việc sử dụng các hàm tạo Đặc điểm của PHP trong các đặc điểm có thể tạo ra các xung đột trong việc soạn các lớp, vì vậy hãy cẩn thận khi bạn sử dụng chúng
- Một lợi ích của PHP Traits là chúng có thể giảm trùng lặp mã cũng như tránh kế thừa lớp phức tạp
- Một trong những nhược điểm của PHP Traits là dễ dàng tạo ra các lớp cồng kềnh với quá nhiều trách nhiệm vì chúng
- Chúng tôi đã phác thảo hai tình huống phổ biến trong đó các đặc điểm có thể có lợi nếu được sử dụng
- Có thể có những trường hợp chúng ta cần mở rộng hoặc ghi đè một kỹ thuật được khai báo trong một đặc điểm được kết nối với một lớp;
Rõ ràng, PHP Traits có thể giúp bạn tiết kiệm rất nhiều thời gian khỏi việc viết đi mã lại cùng một thứ. Với hướng dẫn được tạo ra một cách chuyên nghiệp của chúng tôi, bạn sẽ có thể thành thạo chúng ngay lập tức
Đánh giá bài viết này
- Tác giả
- Bài viết gần đây
Vị trí là tất cả
Vị trí là tất cả. Tài nguyên Go-To của bạn để Tìm hiểu & Xây dựng. CSS, JavaScript, HTML, PHP, C++ và MYSQL