Khái niệm trait (đặc điểm) trong hướng đối tượng PHP
- 14-03-2023
- Toanngo92
- 0 Comments
Khái niệm trait trong PHP
Một lớp trong PHP chỉ hỗ trợ kế thừa đơn. Một lớp con chỉ có thể kế thừa từ một lớp cha duy nhất. Trong các ứng dụng lớn, thay vì tạo mọi thứ từ đầu, nên sử dụng lại các lớp hoặc kiểu đã được xác định và xây dựng thêm chức năng của chúng. Một trong những lợi thế lớn nhất mà OOP mang lại là khả năng sử dụng lại. Để kế thừa nhiều hành vi, PHP sử dụng một khái niệm gọi là traits (đặc điểm).
Một traits tương tự như một class và có thể chứa các hằng số, thuộc tính và phương thức. Nó có thể được sử dụng để nhóm chức năng trong một cấu trúc duy nhất.
Cú pháp:
<?php
trait TraitName{
// todo
}
Người dùng không thể tự khởi tạo một trait. Nó phải được sử dụng trong một lớp với từ khóa use.
Cú pháp:
<?php
class ClassName{
use TraitName;
}
Ví dụ:
<html>
<body>
<?php
trait ExampleTrait {
public $name = "PHP Tutorial";
public function msg1() {
echo "This is an example of a trait";
}
}
class Message {
use ExampleTrait;
}
$obj = new Message();
$obj->msg1();
echo '<br/>';
echo $obj->name;
?>
</body>
</html>
Một số đặc điểm khi sử dụng trait:
Với trait, người dùng có thể khai báo các phương thức có thể được sử dụng trong nhiều hơn một class
- Giảm mã dư thừa trong dự án
- Bạn không thể tự khởi tạo một trait.
- Trait được phép có các phương thức và phương thức trừu tượng trong bất kỳ chế độ hiển thị nào (public, private, protected)
- Các đặc điểm được khai báo giống như của phương thức, nhưng với từ khóa trait làm tiền tố
Kết hợp nhiều traits:
<?php
trait Dungchung{
private $name;
public $classs;
public $birthday;
public $gender;
public $subject;
public function dungchung(){
echo "Dung chung";
}
public function funcso2(){
echo "func so 2";
}
}
trait MotSoTinhNangKhac{
public function funcso3(){
echo "func so 3";
}
}
trait MotSoTinhNangKhac2{
public function funcso4(){
echo "func so 4";
}
}
class Sinhvien{
use Dungchung, MotSoTinhNangKhac;
// property
// method
// constructor => ham nay se chi khi doi tuong bat dau khoi tao
public function __construct()
{
}
public function getName(){
return $this->name;
}
public function setName($name){
$this->name = $name;
}
}
$sv = new Sinhvien();
$sv->classs = 'c2111l';
$sv->dungchung();
// $sv->setName('Nguyen Van A');
echo '<pre>';
var_dump($sv);
echo '</pre>';
// var_dump($sv instanceof Sinhvien);
class SinhvienObj{
use Dungchung, MotSoTinhNangKhac2;
// property
// method
// constructor => ham nay se chi khi doi tuong bat dau khoi tao
public function __construct($name,$class,$birthday,$gender,$subject)
{
$this->name = $name;
$this->classs = $class;
$this->birthday = $birthday;
$this->gender = $gender;
$this->subject = $subject;
}
public function getName(){
return $this->name;
}
public function setName($name){
$this->name = $name;
}
// public function __destruct()
// {
// $this->name = "Toi la toan";
// echo 'Destruct student '.$this->name;
// }
}
$sv2 = new SinhvienObj('Nguyen Van A','A','01/01/2000','Nam','Toan , Ly');
echo '<pre>';
var_dump($sv2);
echo '</pre>';
$sv2->dungchung();