Tôi có hai đặc điểm PHP rằng mỗi kế thừa từ các đặc điểm thứ 3 cùng:tránh va chạm tính trạng - use_once?
trait C {
public function smallTalk() {
echo 'c';
}
}
trait A {
use C;
public function ac() {
echo 'a'.smallTalk();
}
}
trait B {
use C;
public function bc() {
echo 'b'.smallTalk();
}
}
Và tôi muốn sử dụng chúng cả trong một lớp học:
class D {
use A, B;
public function acbc() {
echo ac().bc();
}
}
nhưng tôi vẫn gặp lỗi
Fatal error: Trait method smallTalk has not been applied, because there are collisions with other trait methods on D
Tôi biết use_once
không phải là điều, nhưng tôi đang tìm kiếm cùng một chức năng mà require_once
hoặc include_once
cung cấp, nhưng đối với các đặc điểm. Ví dụ này được đơn giản hóa. C
thực sự của tôi có rất nhiều phương pháp và được thừa kế bởi nhiều hơn 2 đặc điểm, vì vậy tôi không thực sự muốn lặp lại một chuỗi dài insteadof
mỗi khi tôi sử dụng nhiều hơn 1 trong những đặc điểm này.
phiên bản ngắn: Không, bằng tay xử lý va chạm là giá cho việc sử dụng đặc điểm này. – VolkerK
Tôi nghi ngờ bạn đang lạm dụng các đặc điểm. Tôi chỉ sử dụng những đặc điểm như một phương sách cuối cùng. Câu trả lời này có một giải thích tốt về các lựa chọn thay thế (trong C++, nhưng chúng chủ yếu áp dụng cho bất kỳ ngôn ngữ OOP nào) http://stackoverflow.com/questions/406081/why-should-i-avoid-multiple-inheritance-in-c# answer-407928 – Pevara