ホームページ  >  記事  >  バックエンド開発  >  PHPは複数の親クラスから継承できますか?

PHPは複数の親クラスから継承できますか?

(*-*)浩
(*-*)浩オリジナル
2019-09-28 11:21:244716ブラウズ

PHP には多重継承機能がありません。 多重継承をサポートするプログラミング言語であっても、この機能を使用することはほとんどありません。ほとんどの人の意見では、多重継承は良い設計方法ではありません。

PHPは複数の親クラスから継承できますか?

#しかし、開発で多重継承を使用する場合はどうすればよいでしょうか?

以下では、トレイトを使用して PHP で多重継承を実装する際の問題を紹介します。 (推奨学習:

PHP ビデオ チュートリアル )

PHP5.4 以降、PHP はコードを再利用するためのトレイト構文を実装しました。

Trait は、PHP の単一継承言語用に用意されたコード再利用メカニズムです。単一継承の制限を軽減するために、さまざまな構造レベルでメソッドを再利用するメソッドが開発されています。トレイトとクラスの組み合わせのセマンティクスは、複雑さを軽減し、従来の多重継承に関連する典型的な問題を回避する方法を定義します。ミックスインクラス。

需要注意的是,从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

最初に例を見てみましょう:

trait TestOne{

    public function test()
    {
        echo "This is trait one <br/>";
    }

}

trait TestTwo{

    public function test()
    {
        echo "This is trait two <br/>";
    }


    public function testTwoDemo()
    {
        echo "This is trait two_1";
    }

}

class BasicTest{

    public function test(){
        echo "hello world\n";
    }

}


class MyCode extends BasicTest{

    //如果单纯的直接引入,两个类中出现相同的方法php会报出错
    //Trait method test has not been applied, because there are collisions with other trait 
    //methods on MyCode 
    //use TestOne,TestTwo;
    //怎么处理上面所出现的错误呢,我们只需使用insteadof关键字来解决方法的冲突
    use TestOne,TestTwo{
        TestTwo::test insteadof TestOne;
    }

}


$test = new MyCode();
$test->test();
$test->testTwoDemo();

実行結果:

This is trait two 
This is trait two_1

以上がPHPは複数の親クラスから継承できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。