Maison >développement back-end >Problème PHP >PHP peut-il hériter de plusieurs classes parents ?

PHP peut-il hériter de plusieurs classes parents ?

(*-*)浩
(*-*)浩original
2019-09-28 11:21:244743parcourir

PHP n'a pas plusieurs fonctionnalités d'héritage. Même dans un langage de programmation prenant en charge l'héritage multiple, nous utilisons rarement cette fonctionnalité. De l’avis de la plupart des gens, l’héritage multiple n’est pas une bonne méthode de conception.

PHP peut-il hériter de plusieurs classes parents ?

Mais que devons-nous faire lorsque l'héritage multiple est utilisé dans le développement ?

Ce qui suit présente le problème de l'utilisation de traits pour implémenter l'héritage multiple en php. (Apprentissage recommandé : Tutoriel vidéo PHP)

Depuis PHP5.4, PHP a implémenté la syntaxe des traits pour la réutilisation du code.

Trait est un mécanisme de réutilisation de code préparé pour le langage d'héritage unique de PHP. Afin de réduire les limites de l'héritage unique, des méthodes sont développées pour réutiliser les méthodes à différents niveaux structurels. La sémantique de la combinaison de Trait et Classe définit un moyen de réduire la complexité et d'éviter les problèmes typiques liés aux multiples traditionnels. héritage et classes Mixin.

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

Prenons d'abord un exemple :

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();

Résultat de l'exécution :

This is trait two 
This is trait two_1

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn