Maison  >  Article  >  développement back-end  >  Deux méthodes pour passer les classes d'implémentation PHP en tant que paramètres

Deux méthodes pour passer les classes d'implémentation PHP en tant que paramètres

零到壹度
零到壹度original
2018-04-11 10:44:003404parcourir

Lorsque vous travaillez sur des projets PHP, il est souvent nécessaire d'utiliser dynamiquement le même nom de méthode d'une certaine classe. Par exemple, la classe A a une méthode get et la classe B a également une méthode get. À l'heure actuelle, il n'y a que deux classes qui sont très faciles à résoudre. Cela peut être parfaitement résolu avec un if. Et s'il y avait N de telles classes ? Ensuite, il vous faut la méthode que j’utiliserai plus tard pour y parvenir !

Solution

En fait, je n'ai découvert cette astuce qu'en regardant le framework ThinkPHP, c'est-à-dire que PHP peut remplacer une classe par son nom ou son nom d'espace. Dans ce cas, vous pouvez transmettre directement le nom de la classe ou le nom de l'espace de la classe pour réaliser la fonction de transmission de la classe en tant que paramètre.

Remplacer la classe par le nom de la classe

<?php class A{
    public function test(){
        $class = &#39;B&#39;; 
        $b = (new $class); //必须要将类名放在变量里面,如果直接new &#39;B&#39;会出错。
        $b->test();
    }
}class B{
    public function test(){
        var_dump(&#39;class B&#39;);
    }
}$a = new A();$a->test();//最后将输出class B

Remplacer la classe par le nom de l'espace

//FileA<?php require  &#39;testB.php&#39;;class A{
    public function test(){
        $class = &#39;testB\B&#39;; 
        $b = (new $class);//必须要将命名空间放在变量里面,如果直接new &#39;testB\B&#39;会出错。
        $b->test();
    }
}$a = new A();$a->test();
//FileB<?phpnamespace testB; //空间命名class B{
    public function test(){
        var_dump(&#39;testB\B&#39;);
    }   
}

Sortie finale : testB

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