2009-06-09 4 views

답변

8

include_once은 소스 파일을 읽습니다.이 경우에는 B에 대한 클래스 정의가있는 것 같습니다. extendsA 클래스를 inheriting 클래스 B으로 설정합니다. 즉, AB의 모든 항목을 가져 와서 기본 구조에 대한 자체 수정을 정의 할 수 있습니다. 두 작업 사이에는 전혀 관계가 없으며 $a = new B 작업은 무의미합니다 (구문 오류는 말할 것도 없습니다). 사용이 확장

더 높은 수준의 답을 찾는 경우
6

...

은 내 B의 인스턴스를 생성하는 A.에 대한 제한을 부과하지 않는 반면, 유사 B에 일을 할 수있는 결합

두 번째 접근법은 컴포지션이라고하며 일반적으로 키 클래스 계층을 생성하지 않으며 장기적으로보다 유연하므로 OO 시스템을 구축하는 데 선호되는 접근 방식입니다. 그러나 약간 더 느린 코드를 생성하고, 그 다음으로 확장의 단순한 사용보다 더 많은 코드를 생성합니다.

내 2 센트

모든
+0

수 없습니다, 그리고 난 확장 코드 약간 느리게 만드는 이것은 당신이 무엇을 의미입니다 발견했다.? – daniel

+1

A에서 foo를 호출하고 foo를 B에 위임하면 Composition 접근법에서 두 번의 메소드 호출에 소요되는 시간이 있습니다. A가 B를 확장하면 A에서 foo를 호출하면 1 개의 메소드 호출로 간주되므로 클래스가 정의 된 경우 (한 번 발생)를 제외하고는 조회가 필요하지 않습니다. –

1

첫째, 포함은 PHP 소스 파일을 읽고이 포함 지시어 대신에 쓰여진로 취급 명령입니다. 모든 PHP 소스 파일에서 사용할 수 있으며 클래스 상속과는 관련이 없습니다.

그런데 클래스 A 소스 코드가 포함 된 파일을 포함하지 않으면 해당 클래스를 확장 할 수 없습니다.

키워드가 인 클래스를 확장하려면은 객체 지향 프로그래밍의 핵심 개념 인 상속 개념을 의미합니다.

일부 메소드를 사용하는 클래스 (A)를 얻고 약간 다른 동작을 사용하여 비슷한 클래스 (B)가 필요하면 클래스 A를 확장하는 새 클래스를 파생시키고 변경해야하는 메소드 만 수정할 수 있습니다. 으로 덮어 쓰거나 새로 추가).

상속인의 반대쪽에는 구성 인이 있습니다. 컴포지션을 사용하면 클래스를 확장하여 클래스를 확장하지 않아도되므로 원하는 동작을 얻으려면 클래스 패치 워크를 수행해야합니다. 위키 피 디아에

당신은 당신을 더 나은 object composition에 대한 설명과 [클래스 상속 (동시에, 클래스 A를 확장하고 이러한 개념에 약간 confusione가있을 것 같다 http://en.wikipedia.org/wiki/Inheritance_(computer_science))

을 찾을 수 있습니다 그것을 작성하려고 시도하십시오. (단, 올바른 구문은 $ a = new B();입니다).

유용한 참고 것이 분명 [GOF 디자인 패턴 (http://en.wikipedia.org/wiki/Design_Patterns_(book))

2

초 즉 연장 - 클래스 동작이다 첫째 즉 포함하면 -. 컴파일 전에 파일 조작()이다

.

그래서? -?.. 두 번째는 내가 단지 작은 벤치 마크를 한 확장하거나 포함 느린 것을 첫째없이 이제까지