Création dynamique d'objets PHP à partir de chaînes
Introduction :
En PHP, c'est possible pour créer dynamiquement des objets d'une classe spécifique sur la base d'une représentation sous forme de chaîne du nom de classe souhaité. Cette technique peut être particulièrement utile dans les scénarios où le type de classe n'est pas connu à l'avance ou déterminé par programme au moment de l'exécution.
Énoncé du problème :
Considérez une base de données MySQL où un La table stocke des informations sur les objets, y compris leur type et leurs propriétés. La tâche consiste à créer des objets PHP des types spécifiés à l'aide d'une seule requête et à attribuer les valeurs de propriété correspondantes à partir de la même ligne dans la base de données.
Solution :
À créez dynamiquement des objets PHP basés sur des chaînes dans une base de données, vous pouvez suivre ces étapes :
Créez l'objet : Utilisez la syntaxe PHP suivante pour créer une instance de l'objet spécifié class:
$instance = new $type;
Attribuer des valeurs de propriété : Parcourez les colonnes restantes de la ligne de la base de données et attribuez leurs valeurs aux propriétés correspondantes de l'objet nouvellement créé. Par exemple :
foreach ($row as $key => $value) { if ($key != 'type') { $instance->$key = $value; } }
Exemple :
Considérez la table de base de données mentionnée dans le problème :
id | type | propertyVal |
---|---|---|
1 | foo | lorum |
2 | bar | ipsum |
En utilisant la solution décrite ci-dessus, le code PHP suivant pourrait être utilisé pour créer des objets :
$row = fetchRowFromDatabase(); $type = $row['type']; $instance = new $type; foreach ($row as $key => $value) { if ($key != 'type') { $instance->$key = $value; } }
Ceci le code créerait une instance de la classe 'foo' ou 'bar' en fonction de la valeur de la colonne 'type' et attribuerait la valeur 'propertyVal' à la propriété correspondante de l'objet.
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!