2012-01-07 5 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質問者が同じ仕事の流れを求めていたので、私はそれを緊密に結合しました。このメソッドを含むパラメータとして、* interface *を使う方が良いでしょう。更新しました。 –

関連する問題