2012-01-07 3 views

답변

5

번호

PHP에서 당신은 단지 없음 또는 하나 개의 클래스에서 확장 할 수 있습니다. 두 클래스가 서로 독립적이기 때문에 하나 또는 다른 클래스를 찾을 수있는 정보가 없습니다.

은 그러나 당신이 찾고있는 것은 아마 이것이다 :

class A 
{ 
    function myFunction() {} 
} 

class B 
{ 
    private $a; 
    public function __construct(A $a) 
    { 
     $this->a = $a; 
    } 
    public function myFunction() 
    { 
     $this->a->myFunction(); 
    } 
} 
+0

감사합니다! 이것은 충분히 명확하다. – Jenny

+0

좋은 하나, 아주 분명합니다. – Edward

0

현재의 클래스가 다른 클래스의 자식, 그래, 당신이 할 수있는 경우. 부모 클래스에 대한 parent 참조 php.net에서

:

<?php 
class A { 
    function example() { 
     echo "I am A::example() and provide basic functionality.<br />\n"; 
    } 
} 

class B extends A { 
    function example() { 
     echo "I am B::example() and provide additional functionality.<br />\n"; 
     parent::example(); 
    } 
} 

$b = new B; 

// This will call B::example(), which will in turn call A::example(). 
$b->example(); 
?> 
-1

당신이 할 수있는 최선은, 클래스 A에서

Class B extends Class A 

를 클래스 B를 확장하는 것입니다하지만 당신은 할 수 있습니다

class ClassA { 

    function do_something($args) { 
    // Do something 
    } 

} 

class ClassB { 

    function do_something_inclassA($args) { 
    classA::do_something($args); 
    } 

} 

중요 : classa :: do_something() 호출; 오류가 :: 예를 ClassA (정적이 함수를 호출, 기능 do_something()가정적 기능 do_something() 또한

하지 않기 때문에 정적 통지 경고를 얻을 것이다 E_STRICT를보고 다른 단어의 정적 호출입니다 do_something())은 클래스 a의 함수가 그 안에 $ this를 참조 할 수 없다는 것을 의미합니다.

+0

마이너스 투표를 설명해 주실 수 있으십니까? –

+0

무언가가 효과가있는 것만으로도 그것이 수행되거나 권장되어야한다는 것을 의미하지는 않습니다. 그러므로 경고. – vascowhite

+0

"할 수있는 최선"= 격려, "그러나 또한 할 수 있습니다"= 순수 교육, 감사 Shiplu – Prof83

1

클래스 메소드가 이미 동일한 작업을 수행하는 이유는 무엇입니까?

할 수 없습니다. 동일한 작업 흐름을 가장 잘 수행하려면 다른 클래스를 인스턴스화하고 동일한 방법을 호출하십시오. 그게 왜 우리가 OOP를 사용하는지.

의 예를 참조하십시오,

interface Fable() 
{ 
    public function f(); 
} 

class OtherClass implements Fable 
{ 
    public function f() 
    { 
     // job flow 
    } 
} 

class MyClass 
{ 
    private $fable; 
    public function __construct(Fable $f) 
    { 
     $this->fable = $f; 
    } 

    public function method1($args){ 
     return $this->fable->f($args); 
    } 
} 
+0

왜 투표가 제외됩니까? –

+0

누군가가 연속으로 모든 대답을 왜곡했는지, 왜 그런지, 의견을 남기지 않았다. 그러나, 귀하의 대답은'MyClass :: f()'내부에서 새로운 연산자를 사용하고 있습니다. 그러면이 연산자가 다시 밀접하게 결합됩니다. MyClass가 생성 될 때 주입하는 것보다 훨씬 쉽습니다. 나중에 인터페이스를 사용할 수 있습니다. 'new'와 함께 작동하지 않습니다. - 비교 : http://stackoverflow.com/a/8769264/367456 – hakre

+0

@hakre 질문자가 동일한 작업 흐름을 원했기 때문에 나는 단단히 결합 시켰습니다. 메서드를 포함하는 매개 변수로 * 인터페이스 *를 사용하는 것이 더 좋습니다. 업데이트 됨. –

관련 문제