Một đặc điểm có thể sử dụng một đặc điểm khác không?

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

class Brown{hàm công khai sayhello() {echo “Xin chào”;<
class Brown{
public function sayhello() {
echo “Xin chào”;
}
}
Trait for Browns {
public function sayfor() {
echo “Browns”;
}
}
class Sample extends Browns {
use for Browns;
public function Browns() {
echo “nBrowns”;
}
}
$test = new Sample();
$test->sayhello();
$test->sayfor();
$test->Browns();
?>

– 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

// Chứng minh chương trình PHP hoạt động// của giao diện. giao diện MyInterface{hàm công khai examplemethod1();hàm công khai examplemethod2();}hàm công khai examplemethod2(){echo “ExampleMethod2 Called”. “n”;}}$ob = new MyClass;$ob
// PHPprogram to demonstrate working
// of interface.
interface MyInterface{
public function examplemethod1();
public function examplemethod2();
}
class MyClass implements MyInterface{
public function examplemethod1(){
echo “ExampleMethod1 Called” . “n”;
}
public function examplemethod2(){
echo “ExampleMethod2 Called”. “n”;
}
}
$ob = new MyClass;
$ob->examplemethod1();
$ob->examplemethod2();
?>

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);<
}
Trait EatingTrait
{
public function eat($food)
{
$this->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 để

  • Email
  • 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

  • Một đặc điểm có thể sử dụng một đặc điểm khác không?
    Đặ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

Một đặc điểm có thể sử dụng một đặc điểm khác không?

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

Chúng ta có thể sử dụng nhiều đặc điểm trong PHP không?

PHP không hỗ trợ đa kế thừa nhưng bằng cách sử dụng Giao diện trong PHP hoặc sử dụng Đặc điểm trong PHP thay vì lớp, chúng ta có thể triển khai nó.

Một đặc điểm có thể mở rộng một đặc điểm PHP không?

Quy ước đặt tên một đặc điểm bằng hậu tố Trait khá phổ biến, vì vậy đây có thể là điều mà bạn nên cân nhắc áp dụng. Không giống như một lớp, điều quan trọng cần nhớ là bạn không thể thêm phần mở rộng hoặc triển khai vào một đặc điểm . Bạn cũng không thể khởi tạo một đặc điểm.

Có được phép tạo một giao diện sử dụng các đặc điểm không?

Đặc điểm không thể triển khai giao diện . Một đặc điểm cho phép cả hai lớp sử dụng nó cho yêu cầu giao diện chung. Nó hỗ trợ việc sử dụng các phương thức trừu tượng.

Một đặc điểm có thể có các thuộc tính PHP không?

Các đặc điểm có thể chứa các phương thức (như sayHello()) và các thuộc tính (như $name) . Các đặc điểm cũng hỗ trợ các toán tử hiển thị (công khai, được bảo vệ và riêng tư), các phương thức và thuộc tính tĩnh cũng như các toán tử lớp như cha mẹ. , bản thân. và $này. Các lớp PHP có thể sử dụng các đặc điểm và bao gồm mã của các đặc điểm đó.