Maison >développement back-end >tutoriel php >Comment instancier dynamiquement une classe PHP à partir d'une variable ?

Comment instancier dynamiquement une classe PHP à partir d'une variable ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-23 11:13:04360parcourir

How to Dynamically Instantiate a PHP Class from a Variable?

Instancier dynamiquement une classe PHP à partir d'une variable

En PHP, il est possible d'instancier dynamiquement une classe à l'aide d'une variable chaîne contenant la classe nom. Ceci peut être réalisé en attribuant d'abord le nom de la classe à une nouvelle variable, puis en utilisant l'opérateur signe dollar ($) pour instancier la classe.

Exemple :

$var = 'bar';
$classname = $var . 'Class';
$bar = new $classname('argument for constructor');

Cela créera une nouvelle instance de la classe barClass, en passant l'argument 'argument pour le constructeur' à son constructeur.

Utilisation d'un modèle Factory :

Cette technique est souvent utilisée dans le contexte du modèle Factory, où une classe d'usine est chargée de créer et de renvoyer des instances de différentes classes en fonction d'un paramètre donné. Par exemple :

class ClassFactory {
    public static function create($className, $args = []) {
        $instance = new $className(...$args);
        return $instance;
    }
}

Cette classe d'usine peut être utilisée comme suit :

$instance = ClassFactory::create('barClass', ['argument for constructor']);

Remarques supplémentaires :

Lors de l'utilisation de cette technique, il est important de s'assurer que la variable contenant le nom de la classe est correctement nettoyée pour empêcher l'instanciation arbitraire de la classe. Ceci peut être réalisé en utilisant des fonctions comme preg_replace() pour valider le nom de la classe.

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