10

重複の可能性:
PHP で複数のクラスを使用してクラスを拡張できますか?

複数の子クラスを持つクラスがありますが、親の子にしたい別のクラスを追加していますが、他の子クラスの関数の多くも利用したいと考えています。

それぞれの関数を他の子クラスから親に移動することだけを考えましたが、それらを利用するのはこれら2つの子クラスだけであるため、これが本当に必要だとは思わなかったので、拡張できることを望んでいましたメインの親クラスと、既存の子クラスの 1 つから。

4

5 に答える 5

17

子クラスを拡張して、その親と子の関数の両方を継承できます。これは、あなたがやろうとしていることだと思います。

class Parent
{
    protected function _doStuff();
}

class Child extends Parent
{
    protected function _doChildStuff();
}

class Your_Class extends Child
{
    // Access to all of Parent and all of Child's members
}

// Your_Class has access to both _doStuff() and _doChildStuff() by inheritance
于 2011-07-03T20:13:50.557 に答える
11

@morphlesが言ったように、この機能はphp 5.4のトレイト(他の言語のミックスインなど)として利用できるようになります。ただし、本当に必要な場合は、次のような回避策を使用できます。

// your class #1
class A {
    function smthA() { echo 'A'; }
}

// your class #2
class B {
    function smthB() { echo 'B'; }
}

// composer class
class ComposeAB {
    // list of implemented classes
    private $classes = array('A', 'B');
    // storage for objects of classes
    private $objects = array();

    // creating all objects
    function __construct() {
        foreach($this->classes as $className)
            $this->objects[] = new $className;
    }

    // looking for class method in all the objects
    function __call($method, $args) {
        foreach($this->objects as $object) {
            $callback = array($object, $method);
            if(is_callable($callback))
                return call_user_func_array($callback, $args);
        }
    }
}

$ab = new ComposeAB;
$ab->smthA();
$ab->smthB();
于 2011-07-03T20:35:55.290 に答える
8

PHP は単一継承言語ではありません。可能であれば、php 5.4 の今後の機能を検索できます。これが traits です。

于 2011-07-03T20:11:30.557 に答える
2

はい/いいえの答えとして、いいえと言えます。PHP では複数のクラスから拡張することはできません。代わりに使用できますinterface

于 2011-07-03T20:12:27.500 に答える
0

これは逆に考えるとできますが、状況によって異なります。クラスを分けておきたい場合は、より多くの情報を提供しない限り、オブジェクトと継承をどのように構築するかについて、誰もあなたに良い答えを与えることはできません. また、クラス構造を正しくすることについて心配しすぎることは、小さなプロジェクトでは負担になることを覚えておいてください。メソッドを移動して、それで完了し、後でクラスについてさらに学習することもできます。

于 2011-07-03T20:14:31.463 に答える