Chỉnh sửa: 2020 Php 5.4+ và 7+
Kể từ Php 5.4.0, có "đặc điểm" - bạn có thể sử dụng nhiều đặc điểm hơn trong một lớp, vì vậy điểm quyết định cuối cùng sẽ là liệu bạn có thực sự muốn thừa kế hay bạn chỉ cần một số "tính năng" [đặc điểm]. Đặc điểm, mơ hồ nói, một giao diện đã được triển khai có nghĩa là chỉ là use
D.really an inheritance or you just need some "feature"[trait]. Trait is, vaguely said, an already implemented interface that is meant to be just use
d.
Hiện đang được chấp nhận câu trả lời của @FRANCK sẽ hoạt động nhưng trên thực tế, nó không phải là một bản năng kế mà là một trường hợp trẻ em được xác định ngoài phạm vi, cũng có `__call []` tốc ký-xem xét chỉ bằng cách sử dụng `$ này [args] `Bất cứ nơi nào bạn cần phương thức lớp bên ngoài trong lớp" mở rộng ".
Câu trả lời chính xác
Không, bạn không thể, không thực sự, như hướng dẫn sử dụng từ khóa extends
nói:
Một lớp mở rộng luôn phụ thuộc vào một lớp cơ sở duy nhất, nghĩa là nhiều kế thừa không được hỗ trợ.
Câu trả lời thực sự
Tuy nhiên, như @Adam đã đề xuất chính xác, điều này không cấm bạn sử dụng nhiều kế thừa phân cấp.
Bạn có thể mở rộng một lớp, với một lớp khác và một lớp khác với ...
Vì vậy, ví dụ khá đơn giản về điều này sẽ là:
class firstInheritance{}
class secondInheritance extends firstInheritance{}
class someFinalClass extends secondInheritance{}
//...and so on...
Lưu ý quan trọng
Như bạn có thể nhận thấy, bạn chỉ có thể thực hiện nhiều [2+] theo phân cấp nếu bạn có quyền kiểm soát tất cả các lớp có trong quy trình - điều đó có nghĩa là, bạn không thể áp dụng giải pháp này, ví dụ: Với các lớp học tích hợp hoặc với các lớp bạn chỉ đơn giản là không thể chỉnh sửa - nếu bạn muốn làm điều đó, bạn sẽ bị bỏ lại với giải pháp @FRANCK - các trường hợp trẻ em.you can only do multiple[2+] intehritance by hierarchy if you have control over all classes included in the process - that means, you can't apply this solution e.g. with built-in classes or with classes you simply can't edit - if you want to do that, you are left with the @Franck solution - child instances.
... và cuối cùng là ví dụ với một số đầu ra:
class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
Đầu ra nào
I am a of A
I am b of B
I am c of C
Sibian0218 tại Gmail Dot Com ¶
4 năm trước
Sam Tigall ¶
Nemanja ¶
gino dot d tại amail dot com ¶
Shaun tại slickdesign dot com dot au ¶:
Trừ khi tự động tải được sử dụng, các lớp phải được xác định trước khi chúng được sử dụng. Nếu một lớp mở rộng một lớp khác, thì lớp cha phải được khai báo trước cấu trúc lớp con. Quy tắc này áp dụng cho các lớp kế thừa các lớp và giao diện khác.
Ghi chú::
Nó không được phép ghi đè một thuộc tính đọc-viết với thuộc tính readonly hoặc ngược lại.
2class A{ function a_hi[]{ echo "I am a of A".PHP_EOL."
".PHP_EOL; } } class B extends A{ function b_hi[]{ echo "I am b of B".PHP_EOL."
".PHP_EOL; } } class C extends B{ function c_hi[]{ echo "I am c of C".PHP_EOL."
".PHP_EOL; } } $myTestInstance = new C[]; $myTestInstance->a_hi[]; $myTestInstance->b_hi[]; $myTestInstance->c_hi[];
Ví dụ #1 ví dụ kế thừa
class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
3class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
4class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
5Trả về loại tương thích với các lớp bên trong
Trước PHP 8.1, hầu hết các lớp hoặc phương thức nội bộ đã không khai báo loại trả lại của họ và bất kỳ loại hoàn trả nào được cho phép khi mở rộng chúng.
Kể từ Php 8.1.0, hầu hết các phương thức nội bộ bắt đầu "dự kiến" khai báo loại trả lại của họ, trong trường hợp đó, loại phương thức trả về phải tương thích với cha mẹ được mở rộng; Nếu không, một thông báo không nhận được được phát ra. Lưu ý rằng việc thiếu một tuyên bố hoàn trả rõ ràng cũng được coi là sự không phù hợp đặc trưng, và do đó dẫn đến thông báo từ chối.
Nếu loại trả về không thể được khai báo cho một phương thức ghi đè do các mối quan tâm tương thích phiên bản chéo PHP, một thuộc tính
class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
6 có thể được thêm vào để im lặng thông báo không dùng nữa.Ví dụ #2 Phương thức ghi đè không khai báo bất kỳ loại trả về nào
class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
7Ví dụ #3 Phương thức ghi đè khai báo loại trả về sai
class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
8Ví dụ #4 Phương thức ghi đè tuyên bố loại trả về sai mà không có thông báo không dùng nữa
class A{
function a_hi[]{
echo "I am a of A".PHP_EOL."
".PHP_EOL;
}
}
class B extends A{
function b_hi[]{
echo "I am b of B".PHP_EOL."
".PHP_EOL;
}
}
class C extends B{
function c_hi[]{
echo "I am c of C".PHP_EOL."
".PHP_EOL;
}
}
$myTestInstance = new C[];
$myTestInstance->a_hi[];
$myTestInstance->b_hi[];
$myTestInstance->c_hi[];
9Jackdracona tại msn dot com ¶ ¶
12 năm trước
I am a of A
I am b of B
I am c of C
0I am a of A
I am b of B
I am c of C
1I am a of A
I am b of B
I am c of C
2I am a of A
I am b of B
I am c of C
3I am a of A
I am b of B
I am c of C
4I am a of A
I am b of B
I am c of C
5
Mohammad Istanbouly ¶ ¶
5 năm trước
I am a of A
I am b of B
I am c of C
6I am a of A
I am b of B
I am c of C
7I am a of A
I am b of B
I am c of C
8I am a of A
I am b of B
I am c of C
9Strata_ranger tại hotmail dot com ¶
12 năm trước
use
0
use
1
use
2
use
3
use
4
use
5Mohammad Istanbouly ¶ ¶
5 năm trước
use
6
use
7
use
8
use
9
extends
0Strata_ranger tại hotmail dot com ¶
Akashwebdev tại gmail dot com ¶
extends
1
extends
2
use
4
extends
47 năm trước ¶
12 năm trước
extends
5
extends
6
extends
7
use
4
extends
9Mohammad Istanbouly ¶ ¶
5 năm trước
final
0
final
1
final
2
final
3
final
4Strata_ranger tại hotmail dot com ¶
Akashwebdev tại gmail dot com ¶
final
5
final
6
final
47 năm trước ¶
5 năm trước
final
8
final
9
static
0
static
1Strata_ranger tại hotmail dot com ¶
5 năm trước
static
2
static
3
static
4
final
4Strata_ranger tại hotmail dot com ¶
5 năm trước
static
6
static
7
static
8
static
9Strata_ranger tại hotmail dot com ¶
Akashwebdev tại gmail dot com ¶
private final
0
private final
1
private final
2
private final
3
final
47 năm trước ¶
Niemans tại pbsolo dot nl ¶
private final
5
private final
6
private final
7
use
4
private final
92 năm trước ¶
5 năm trước
protected
0
protected
1
protected
2Strata_ranger tại hotmail dot com ¶
5 năm trước
protected
3
protected
4
protected
5
protected
6
protected
7Strata_ranger tại hotmail dot com ¶
12 năm trước
protected
8
protected
9
public
0
public
1Mohammad Istanbouly ¶ ¶
5 năm trước
public
2
public
3
public
4
public
5