La création de PHP instance de la classe string
J'ai deux classes:
classe ClassOne { }
et de la classe ClassTwo {}
. Je suis une chaîne de caractères qui peut être soit "Un" ou "Deux".
Au lieu d'utiliser une longue instruction switch tels que:
switch($str) {
case "One":
return new ClassOne();
case "Two":
return new ClassTwo();
}
Est-il de toute façon façon, je peux créer une instance à l'aide d'une chaîne, c'est à dire new Class("Class" . $str);
Merci,
Joel
Vous devez vous connecter pour publier un commentaire.
Oui, vous le pouvez!
Lors de l'utilisation d'espaces de noms, l'approvisionnement de la nom complet:
D'autres trucs cool que vous pouvez faire en php sont:
Les variables:
Et fonctions de la variable & méthodes.
$my_obj = Package\$class_name();
. Au lieu de cela, vous avez à$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 caractères de la classe appeléeVous pouvez simplement utiliser la syntaxe suivante pour créer une nouvelle classe (ce qui est utile si vous voulez créer un usine):
Comme une (exceptionnellement brut) exemple de méthode de fabrique:
require_once($className.'php');
->require_once($className.'.php');
ont un oeil à l'exemple 3 à partir de http://www.php.net/manual/en/language.oop5.basic.php
Permet de dire
ClassOne
est défini comme:À l'aide de PHP Réflexion;
Créer une nouvelle Instance:
Appeler une méthode:
Utiliser une variable comme une méthode:
L'aide de la Réflexion au lieu de simplement en utilisant le raw de la ficelle pour créer un objet vous donne un meilleur contrôle sur votre objet et plus facile de testabilité (PHPUnit s'appuie fortement sur la Réflexion)