Ghi đè phương thức đặc điểm php

Ngôn ngữ PHP chỉ hỗ trợ đơn kế thừa. một lớp con chỉ có thể kế thừa từ một lớp cha duy nhất. Để giải quyết các giới hạn của đơn kế thừa trong việc sử dụng lại mã nguồn, từ PHP 5. 4 trở đi PHP Hỗ trợ Traits giúp lập trình viên có thể sử dụng lại các phương thức từ các lớp khác nhau một cách dễ dàng hơn

I. Tìm hiểu về Traits trong PHP

1. Đặc điểm là gì?

- Các đặc điểm được sử dụng để tuyên bố các phương thức có thể được sử dụng trong nhiều lớp

- Các đặc điểm có thể được hiểu như là một lớp, giúp tập hợp một nhóm phương thức mà chúng tôi muốn sử dụng trong một lớp khác. , nó không thể khởi động được, thay vào đó chúng ta sử dụng từ khóa use.  

- Để khai báo Traits ta sử dụng từ khoá trait

-  Để sử dụng Đặc điểm trong lớp, hãy sử dụng từ khóa sử dụng

2. Các đặc điểm của Đặc điểm

- Các đặc điểm có chức năng gom các đoạn mã lặp lại một nơi được sử dụng ở nhiều nơi và nếu thay đổi thì bạn chỉ cần sửa đổi ở một tệp duy nhất.
- Đặc điểm như một lớp trừu tượng[không thể khởi tạo đồng đều] nhưng không hoàn toàn giống nhau.
- Các phương thức trong Đặc điểm có thể bị ghi đè lại trong lớp sử dụng nó.

3. Ưu nhược điểm của Traits

- điểm ưu tiên

  • Làm giảm việc lặp lại mã đáp ứng được nguyên tắc[DRY - Don't Repeat Yoursefl]
  • Khắc phục được điểm yếu kế thừa của PHP

- Nhược điểm

  • Sử dụng Traits gây khó khăn trong việc đọc các phương thức từ một lớp có sử dụng Traits

II. Những lưu ý khi sử dụng Traits

1. Đặc Điểm Được Ưu Tiên Hơn Mở Rộng

- Ví dụ ta có Trait RollUp và Class Person đều có phương thức sayHello[], class Student vừa Extends class Person vừa use Trait thì chương trình sẽ ưu tiên phương thức sayHello[] ở Trait

class Person {
    public function sayHello[] {
        echo 'Hello!';
    }
}

trait RollUp {
    public function sayHello[] {
        echo 'Hi!';
    }
}

class Student extends Person {
    use RollUp;
}

$student = new Student[];
$student->sayHello[];

2. Cách xử lý xung đột khi sử dụng nhiều Đặc điểm có tên phương thức giống nhau

- Ví dụ ta có 2 lần Trait như Admin, Member đều có phương thức đăng nhập[], để lớp Client sử dụng phương thức login[] của Trait Member thì ta sử dụng từ khóa thay vì để xác định mức độ ưu tiên cho phương thức của bạn

trait Admin {
    public function login[] {
        echo 'Login for Admin';
    }
}

trait Member {
    public function login[] {
        echo 'Login for Member';
    }
}

class Client{
    use Admin, Member{
    Member::login insteadof Admin; // Sử dụng phương thức login ở trait Member thay cho Admin
    } 
}

$client = new Client[];
$client->login[];

3. Thay đổi phạm vi truy cập của phương thức trong Trait

- Ví dụ ta có Trait User có phương thức login[] là công khai, ta muốn đổi phạm vi phương thức login[] là protected thì trong class Client use Trait ta có thể làm như sau

trait User {
    public function login[] {
        echo 'Login Success!';
    }
}

// Thay đổi phạm vi sử dụng của phương thức login
class Client {
    use User { login as protected; }
}

4. Trong Trait cũng có thể có các phương thức trừu tượng

- Ta có thể định nghĩa phương thức trừu tượng trong Trait

trait Hello
{
    abstract public function sendMessage[];

    public function hello[]
    {
        echo "Hello World";
    }

} 

class Messenger
{
    use Hello;
    public function sendMessage[]
    {
        echo 'I am going to say hello';
        echo $this->hello[];
    }
}

$sms = new Messenger;
$sms->sendMessage[];

5. Trait could lồng nhau

- Trait lồng nhau có nghĩa là khi Trait A có phương thức a[], Trait B được sử dụng Trait A thì Trait B cũng sẽ sử dụng được phương thức a[]

trait A
{
   public function a[]{
     echo "Hihi";
   }
}
trait B
{
    use A;
}

class C {
  use B;
}

$c = new C[];
$c->a[];

Bài viết nên đọc

Trên đây là những kiến ​​thức từ kinh nghiệm bản thân mình các bạn có thể tham khảo. Nếu các bạn có đóng góp ý kiến ​​cho mình thì hãy gửi vào đây, mình sẵn sàng đón nhận các ý kiến ​​đóng góp từ các bạn

Hãy xem xét ví dụ này, khi chúng ta có một đặc điểm và một lớp sử dụng đặc điểm này. Nhưng chúng tôi muốn ghi đè phương thức của một đặc điểm và chúng tôi cũng muốn gọi phương thức của đặc điểm ban đầu. Làm thế nào chúng ta có thể làm điều đó?

Chủ Đề