Phương pháp ghi đè đặ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 

3.  

- Để 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 Trait lần cuối là 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

Trong bài viết này, chúng ta sẽ tìm hiểu về tính kế thừa (kế thừa) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP

1. Kế thừa (inheritance) trong PHP là gì?

Tính kế thừa (kế thừa) đề cập đến việc định nghĩa một lớp mới (lớp mới) dựa trên một lớp cũ đã có (lớp hiện có). Lớp mới được gọi là lớp dẫn xuất (lớp dẫn xuất) hay lớp con (lớp con). Các lớp đã được gọi là lớp cơ sở cũ (lớp cơ sở) hoặc lớp cha (lớp cha)

Lớp con sẽ kế thừa tất cả các thuộc tính và phương thức công khai và được bảo vệ từ lớp cha. Ngoài ra, lớp con có thể có các thuộc tính và phương thức riêng

Trong PHP, một lớp con kế thừa lớp cha bằng cách sử dụng từ khóa mở rộng. Ví dụ

name = $name;
        $this->color = $color;
    }
    public function info() {
        echo "The cat is {$this->name} and the color is {$this->color}.";
    }
}
class Kitty extends Cat {
    public function message() {
        echo "Hello, my name is " . $this->name . ", has " . $this->color . " color";
    }
  }
$kitty = new Kitty("Kitty", "pink and white");
$kitty->message();
echo "
"; $kitty->info(); ?>

Lớp Kitty kế thừa từ lớp Cat. Lớp Kitty có thể sử dụng các thuộc tính công khai $name và $color cũng như các phương thức công khai

4 và 
5 kế thừa từ lớp Cat. Lớp Kitty cũng có phương thức của riêng nó là 
6

2. Chỉ định truy cập được bảo vệ trong kế thừa

Các thuộc tính và phương thức chỉ có định nghĩa truy cập là được bảo vệ thì chỉ được truy cập bên trong Lớp (lớp) chứa nó và Lớp dẫn xuất (lớp dẫn xuất) của lớp đó

________số 8

Trong ví dụ trên, thuộc tính $weight chỉ có truy cập được bảo vệ và có thể sử dụng trong lớp dẫn đầu ra. Phương thức

5 chỉ có định nghĩa truy cập được bảo vệ và có thể sử dụng trong lớp dẫn đầu ra

3. Ghi đè (ghi đè) phương thức kế thừa trong PHP

Các phương thức mà lớp con kế thừa có thể được ghi đè (ghi đè) bằng cách định nghĩa lại các phương thức này trong lớp con

name = $name;
        $this->color = $color;
    }
    public function info() {
        echo "The cat is {$this->name} and the color is {$this->color}.";
    }

}
class Kitty extends Cat {
    public $weight;
    public function __construct($name, $color, $weight) {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    public function info() {
        echo "Hello, my name is " . $this->name . ", has " . $this->color . " color";
        // using protected $weight in derived class
        echo "
And my weight is " . $this->weight . " kilograms"; } } $kitty = new Kitty("Kitty", "pink and white", "3.5"); $kitty->info(); ?>
Kết quả
0

Các phương thức

4 và 
5 trong lớp con Kitty sẽ ghi đè các phương thức 
4 và 
5 trong lớp cha Cat

4. Từ khóa final và kế thừa trong PHP

Từ khóa cuối cùng có thể được sử dụng để ngăn kế thừa một lớp hoặc ngăn chặn ghi đè (ghi đè) phương thức

1

Trong ví dụ trên, Lớp Cát được tuyên bố cuối cùng nên không được kế thừa

2

Trong ví dụ trên, hàm

5 trong lớp Cat được khai báo cuối cùng nên không được ghi đè trong lớp con Kitty