最近、PHP 開発をしている友人が PHP の多重継承について質問しました。実は、今日は多重継承が何なのか理解していませんでした。ということで、意図的に多重継承の概念を詳しく説明しました。それについて学んだ後、PHP での多重継承の実装に関するいくつかの見解について話しましょう。
多重継承について説明する前に、まず相対的な単一継承について説明します。単一継承とは、クラスが 1 つの親クラスからのみ継承できることを意味します。実際の例では、息子には 1 つの父親しかありません。多重継承とは、クラスが複数の親クラスの動作や特性を同時に継承できる機能のことを指します。これは常識に反しています。つまり、息子は複数の父親を持つことができます。多重継承はオブジェクト指向プログラミング言語に特有の機能であるため、php5 より前には継承などはありませんでした。しかし、php では、php5 でも単一継承のみが実装されています。ただし、クラスの特性がインターフェイスに抽象化されており、インターフェイスを実装することによってオブジェクトが複数のアイデンティティを持っている限り、インターフェイスを使用するなど、他の特別な方法を通じてクラスの多重継承を実現できます。それらは PHP でシミュレートできます。継承が行われます。
以下では例を使用して、php で多重継承を実装する方法を説明します。具体的なコードは次のとおりです。
<?php interface UserInterface{ //定义User的接口 function getname(); } interface TeacherInterface{ //teacher相关接口 function getLengthOfService(); } class User implements UserInterface{ //实现UserInterface接口 private $; public function getName(){ return $this->name; } } class Teacher implements TeacherInterface{ //实现TeacherInterface接口 private $lengthOfService=5; // 工龄 public function getLengthOfService(){ return $this->lengthOfService; } } // 继承自User类,同时实现了TeacherInterface接口. class GraduateStudent extends User implements TeacherInterface{ private $teacher ; public function __construct(){ $this->teacher=new Teacher(); } public function getLengthOfService(){ return $this->teacher->getLengthOfService(); } } class Act{ //注意这里的类型提示改成了接口类型 public static function getUserName(UserInterface $_user){ echo "Name is " . $_user->getName() ."<br>"; } //这里的类型提示改成了TeacherInterface类型. public static function getLengthOfService(TeacherInterface $_teacher){ echo "Age is " .$_teacher->getLengthOfService() ."<br>"; } } $graduateStudent=new GraduateStudent(); Act::getUserName($graduateStudent); Act::getLengthOfService($graduateStudent); //结果正如我们所要的,实现了有多重身份的一个对象
サンプルの実行結果は次のとおりです:
名前はトムです
年齢は 5 歳
さらに、多重継承により実際の開発ではプログラムの複雑さと曖昧さが増し、コードのデバッグに非常に悪影響を与えることに注意する必要があります。したがって、開発中に単一継承で実装する方法が見つかった場合は、多重継承の使用を避けることが最善です。