2012-04-11 4 views
0

저는 A라는 클래스를 가지고 있습니다. A를 확장하는 B라는 또 다른 클래스가 있습니다. B가 아닌 A를 인스턴스화해야하지만 다음과 같은 메소드를 사용해야합니다. B도. 어떻게해야합니까?PHP : 클래스를 인스턴스화하고 다른 클래스의 메서드를 사용합니다.

Class A 
{ 
    public function foo() { } 
} 

Class B extends A 
{ 
    public function bar() { } 
} 

$a = new A(); 
$a->bar(); 

나는 이것이 가능하지 않다는 것을 알고 있지만,이를 위해 해결책이 필요하다.

추신 :이 질문의 제목이 맞으면 좋겠습니다.

+0

왜 'B'를 인스턴스화 할 수 없습니까? 나는 당신의 실제 문제가 있다고 생각합니다. – Bazzz

+2

구문 문제보다는 디자인 문제라는 인상을 받았습니다. –

+0

B를 인스턴스화 할 수없는 이유에 대해 자세히 설명합니다. –

답변

-1

B의 메소드가 정적 일 수 있습니까?

Class A 
{ 
    public function foo() { } 
} 

Class B extends A 
{ 
    public static function bar2() { } 
} 

$a = new A(); 
$a->bar(); 
B::bar2(); 

분명히 B :: bar()가 A :: bar() 구현을 재정의하기 때문에 다른 이름을 지정하는 것이 좋습니다.

구조가 약간 벗어 났을 것으로 생각됩니다. 재사용 가능한 코드 스 니펫을 원하는 루틴으로 추상화하십시오.

1
$a = new A(); 
$a->bar(); 

치명적인 오류가 발생합니다. bar()A 클래스의 메소드가 아니기 때문에 따라서 A 클래스의 객체를 사용하여 호출 할 수 없습니다.

이 잘 작동합니다 :

내가 생각
Class A 
{ 
    public function foo() { } 
} 

Class B extends A 
{ 
    public static function bar() { } 
} 

$a = new A(); 
B::bar(); 
0

, 당신은 그냥 extends 키워드 부모 클래스 (A) 연장하지 않는 PHP 구문 (Which can be rather confusing sometimes)

를 오해, A의 하위 클래스 인 새 클래스 B을 만듭니다. BA의 메소드를 상속 받지만 A 그 자체는 변경되지 않습니다.

관련 문제