J'ai deux classes, class ClassOne { }
et class ClassTwo {}
. Je reçois une chaîne qui peut être soit "One"
ou "Two"
.
Au lieu d'utiliser une longue switch
déclaration telle que:
switch ($str) {
case "One":
return new ClassOne();
case "Two":
return new ClassTwo();
}
Existe-t-il un moyen de créer une instance à l'aide d'une chaîne, c'est new Class("Class" . $str);
-à- dire ?
$my_obj = Package\$class_name();
. Au lieu de cela, vous devez$class_name = "Package\\" . $class_name; $my_obj = new $class_name();
$className = '\Foo\Bar\MyClass';
$instance = new $className();
$model = $user_model::find()->All();
où$user_model
est la variable contenant la chaîne de la classe appeléeVous pouvez simplement utiliser la syntaxe suivante pour créer une nouvelle classe (c'est pratique si vous créez une usine ):
Comme exemple (exceptionnellement grossier) de méthode d'usine:
la source
require_once($className.'php');
->require_once($className.'.php');
jetez un œil à l'exemple 3 de http://www.php.net/manual/en/language.oop5.basic.php
la source
Disons que
ClassOne
se définit comme:Utilisation de PHP Reflection;
Créez une nouvelle instance:
Appelez une méthode:
Utilisez une variable comme méthode:
Utiliser Reflection au lieu d'utiliser simplement la chaîne brute pour créer un objet vous donne un meilleur contrôle sur votre objet et une testabilité plus facile (PHPUnit s'appuie fortement sur Reflection)
la source