Bạn có thể mở rộng đặc điểm hơi. Mở rộng câu trả lời của mrlee, khi bạn use
một đặc điểm, bạn có thể đổi tên phương thức của nó.
Nói ví dụ bạn có một "cha mẹ" đặc điểm đã được xác định bởi khuôn khổ của bạn:
trait FrameworkTrait {
public function keepMe() {
// Framework's logic that you want to keep
}
public function replaceMe() {
// Framework's logic that you need to overwrite
}
}
Đơn giản chỉ cần kéo trong đặc điểm phụ huynh, đổi tên phương pháp replaceMe
của mình cho cái gì khác, và xác định phương pháp replaceMe
của riêng bạn.
trait MyTrait {
use FrameworkTrait {
FrameworkTrait::replaceMe as frameworkReplaceMe;
}
public function replaceMe() {
// You can even call the "parent" method if you'd like:
$this->frameworkReplaceMe();
// Your logic here
}
}
Và sau đó trong lớp học của bạn:
class MyClass {
use MyTrait;
}
Bây giờ các đối tượng của lớp này có thể làm điều này:
$obj = new MyClass();
$obj->keepMe(); // calls "parent" trait
$obj->replaceMe(); // calls "child" trait
$obj->frameworkReplaceMe(); // calls "parent" trait
Làm thế nào 'Lớp C sẽ sử dụng T {} 'thể khác với những gì chúng ta đã có (ngoài cú pháp hơi khác nhau)? – Jon
Cú pháp ngắn hơn khi tôi muốn mở rộng một số lớp từ một lớp cơ sở nhưng bằng cách sử dụng (các) đặc điểm. – Meglio
@Meglio: Chỉ cần làm điều đó: 'Lớp C mở rộng Cơ sở {sử dụng T}'. – hakre