ホームページ  >  記事  >  バックエンド開発  >  PHP は単一継承ですか、それとも多重継承ですか?

PHP は単一継承ですか、それとも多重継承ですか?

王林
王林オリジナル
2019-09-19 17:56:433229ブラウズ

PHP は単一継承ですか、それとも多重継承ですか?

PHP は多重継承をサポートしていません。多重継承を実装するにはどうすればよいでしょうか?

インターフェースまたはトレイトを使用して実装可能

インターフェース ここではあまり説明しませんが、原理としては、1 つのクラスが複数のインターフェースを実装できるということです。次のコードはこれを示しています。

interface test1{
    public function connect();
}

interface test2{
    public function contact();
}

// 类可以同时实现多个接口
class myCode implements test1,test2{
    public function connect(){
    echo "test1!";
    }
    public function contact(){
    echo "test2!":
    }
}

多重継承のトレイト実装に焦点を当てましょう (実際には、多重継承とは呼ばれません。多重継承に似た機能と呼ぶべきです)
それでは、トレイトとは何でしょうか?
回答: クラスとインターフェイスの両方のように見えますが、実際にはどちらでもありません。トレイトはクラスの部分的な実装とみなすことができ、1 つ以上の既存の PHP クラスに混合できます。その機能クラスが何を実行できるかを示すことと、モジュラー実装を提供することの 2 つがあります。 Trait は、PHP の単一継承制限に対する柔軟なコード再利用メカニズムを提供するコード再利用テクノロジです。
それでは、特性を実装するにはどうすればよいでしょうか?次のコードを見てください:

//基本类
  class basicTest{
    public function test(){
      echo "hello,world\n";
    }
  }
  //traitOne
  trait traitOne{
    public function test(){
      echo "this is trait one";
    }
    public function testOne(){
      echo "one<br />";
    }
  }
  //traitTwo
  trait traitTwo{
    // public function test(){
      // echo "this is trait two!";
    // }
    public function testTwo(){
      echo "Two<br />";
    }
   }
  //继承基本类,并use trait
  class myCode extends basicTest{
    use traitOne,traitTwo;
    public function test(){
      echo "hehaha!!<br />";
    }
  }

  $obj = new myCode();
  $obj->testTwo();

注:

優先順位: 独自のメソッド > トレイト メソッド > 継承されたメソッド (これがどのように機能するか)
上記のコードのコメントを開くと、2 つの特性のメソッドが同じ名前を持っているため、エラーが報告されます。

推奨チュートリアル: PHP ビデオ チュートリアル

以上がPHP は単一継承ですか、それとも多重継承ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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