2009-06-09 30 views

Trả lời

8

include_once đọc trong tệp nguồn, trong trường hợp này có lẽ có định nghĩa lớp cho B trong đó. extends của bạn thiết lập lớp Ainheriting lớp B, tức là A nhận mọi thứ trong B và sau đó có thể xác định các sửa đổi của riêng nó đối với cấu trúc cơ bản đó. Không có bất kỳ mối quan hệ nào thực sự giữa hai thao tác này và các hoạt động $a = new B của bạn là vô nghĩa (chưa kể các lỗi cú pháp).

6

Trong trường hợp bạn đang tìm kiếm một câu trả lời mức độ cao hơn ...

Sử dụng mở rộng liên kết với A để làm những việc tương tự như B, trong khi tạo ra một thể hiện của B trong vòng A không áp đặt bất kỳ hạn chế đối với A.

Cách tiếp cận thứ hai được gọi là Thành phần và thường là cách tiếp cận ưu tiên để xây dựng hệ thống OO vì nó không mang lại phân cấp Lớp cao và linh hoạt hơn trong thời gian dài. Tuy nhiên, nó mang lại mã hơi chậm hơn, và nhiều hơn thế so với việc sử dụng mở rộng đơn giản.

2 Cents My

+0

những gì sẽ chậm hơn hoặc bao gồm? I chỉ làm một điểm chuẩn nhỏ và tôi thấy rằng việc mở rộng làm cho mã hơi chậm. – daniel

+1

Giả sử tôi muốn gọi foo trên A và nó ủy nhiệm foo cho B, sau đó sẽ có thời gian thực hiện cho hai cuộc gọi phương thức trong phương thức Thành phần. Nếu A mở rộng B sau đó gọi foo trên A được coi là 1 cuộc gọi phương thức và không cần tìm kiếm trừ khi các lớp được xác định (xảy ra một lần). –

1

Trước hết, bao gồm là một lệnh đọc một tập tin mã nguồn php và đối xử với nó như nó đã được viết ở vị trí của chỉ thị bao gồm. Bạn có thể sử dụng nó trên bất kỳ tệp nguồn php nào và không liên quan đến thừa kế lớp.

Nhân tiện, nếu bạn không bao gồm tệp chứa mã nguồn lớp A, bạn không thể mở rộng lớp đó.

Nối dài một lớp với từ khóa mở rộng hàm ý khái niệm kế thừa là khái niệm then chốt trong lập trình hướng đối tượng.

Bạn nhận được một lớp (A) với một số phương pháp và cần một lớp tương tự (B) với một hành vi nhỏ khác nhau, bạn có thể lấy được lớp mới extendig lớp A và sửa đổi chỉ các phương pháp phải thay đổi (nó là được gọi là ghi đè) hoặc thêm số mới.

Ở đối diện với sự thừa kế có thành phần . Với thành phần bạn không mở rộng một lớp để thay đổi hành vi của nó thay vì bạn phải thực hiện chắp vá các lớp để có được hành vi mong muốn.

On wikipedia bạn có thể tìm thấy một lời giải thích tốt hơn trên object composition và [lớp thừa kế] (http://en.wikipedia.org/wiki/Inheritance_(computer_science))

Dường như có một chút confusione bằng các khái niệm, khi bạn mở rộng lớp học của bạn A và, đồng thời, bạn cố gắng soạn nó (nhân tiện, cú pháp chính xác là $ a = new B();).

Một tài liệu tham khảo hữu ích nó, rõ ràng, [GOF, Thiết kế mẫu] (http://en.wikipedia.org/wiki/Design_Patterns_(book))

2

thứ hai, tức là mở rộng, - là hoạt động lớp Thứ nhất, tức là bao gồm -. Là hoạt động tập tin, (trước khi biên dịch)

.

Vì vậy, thứ hai là không thể bao giờ hết.nếu không phải là thứ nhất,

Các vấn đề liên quan