Trang chủ » Bài 13: Traits trong PHP (phần 2)

Bài 13: Traits trong PHP (phần 2)

Tác giả:
Đánh giá bài đăng
0
84

Tiếp tục với phần trước phần này chúng ta sẽ tìm hiểu nốt về các vấn đề liên quan đến Traits (mà mình biết).

1, Phương thức tĩnh trong Traits.

-Trong Traits có hỗ trợ cho chúng ta cả phương thức tĩnh và thuộc tính tĩnh như một class bình thường.

Thuộc tính tĩnh

VD: Thuộc tính tĩnh trong Traits.

setName('Vũ Thanh Tài');

//getName
echo $connguoi->getName();
//Kết Quả: Vũ Thanh Tài

//Khởi tạo class ConNguoi
$trecon = new ConNguoi();

//getName
echo $trecon->getName();
//Kết Quả: Vũ Thanh Tài

//Khởi tạo class NguoiLon 
$nguoilon = new NguoiLon();

//getName
echo $nguoilon->getName();
//Kết Quả: Chưa xét

Kết Luận: Như vậy Thuộc tính tĩnh chỉ ảnh hưởng bên trong một class thôi còn khi gọi nó ở tron một class khác thì hoàn toàn bình thường.

Phương thức tĩnh

VD: Phương thức tĩnh trong trait.

getName();
//Kết Quả: Name Trait

//hoặc
echo ConNguoi::getName();
//Kết Quả: Name Trait

Kết Luận: Phương thức tĩnh trong trait hoàn toàn giống phương thức tĩnh trong class.

2, Phương thức trừu tượng trong trait.

-Trait cũng hỗ trợ chúng ta sử dụng phương thức trừu tượng (xem phương thức trừu tượng).

VD:

name;
    }
}

// khởi tọa class ConNguoi
$connguoi = new ConNguoi();
//getName
echo $connguoi->getName();
//Kết Quả: Vũ Thanh Tài

3, Thay đổi visibility của phương thức trait.

-Có đôi khi các bạn muốn thay đổi visibility (phạm vi truy cập) của một hoặc nhiều phương thức trong traits thì phải làm sao? Trong PHP cũng có hỗ trợ chúng ta thay đổi visibility của phương thức trong traits với cú pháp như sau:

use methodName as visibility;

Trong đó:

  • methodName là phương thức các bạn muốn thay đổi.
  • visibility là một trong 3 mức truy cập: public,protected, private.

VD:

name;
    }
}

class ConNguoi
{
    use Name {
        //thay đổi visibitily thành public
        getName as public;
    }
}

$connguoi = new ConNguoi();
echo $connguoi->getName();
//Kết Quả: Vũ Thanh Tài

4, Tạo định danh mới cho Traits.

-Không những bạn có thể ưu tiên phương thức trong traits hay thay đổi visibility, mà bạn còn có thể tạo định danh mới cho traits trong PHP nữa.

VD: Tạo định danh mới cho phương thức getName thành doName.

name;
    }
}

class ConNguoi
{
    use Name {
        //Định danh mới cho getName
        getName as doName;
    }
}

$connguoi = new ConNguoi();

echo $connguoi->doName();
//Kết Quả: Vũ Thanh Tài

-Hoặc chúng ta cũng có thể vừa thay đổi visibility vừa tạo định danh mới cho phương thức.

VD: Vừa thay đổi visibility vừa tạo định danh mới cho phương thức getName.

name;
    }
}

class ConNguoi
{
    use Name {
        //Định danh mới cho getName
        getName as public doName;
    }
}

$connguoi = new ConNguoi();

echo $connguoi->doName();
//Kết Quả: Vũ Thanh Tài

5, So sánh Traits với abstract và interface.

Traits với interface

Giống nhau: Đều không có thể khởi tạo được mà chỉ có thể khai báo.

Khác nhau:

  • Trait:
    • Có thể khai báo thuộc tính.
    • Có thể định nghĩa và khởi tạo phương thức.
  • interface:
    • Chỉ có thể khai báo thuộc tính cố định (hằng).
    • Chỉ có thể định nghĩa không thể khai báo.

Traits với abstract

Giống nhau: Đều không có thể khởi tạo được mà chỉ có thể khai báo.

Khác nhau:

  • Trait:
    • Có thể lồng nhau một cách đơn giản
  • abstract:
    • Khi muốn sử dụng lẫn nhau phải kế thừa hết sức lằng nhằng.

6, Lời kết.

-Qua 2 phần trình bày về traits của mình (xem phần 1), mình hi vọng mọi người có thể hiểu hết được các vấn đề của mình đưa ra. Đó mới chỉ là những gì mà mình biết về Traits thôi còn các bạn nào muốn tìm hiểu thêm có thể tham khảo tại link.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Facebook Messenger Chat Zalo
Messenger Zalo