PHP dynamique de chargement de classe
Permet de dire que j'ai un tableau que je veux convertir un objet de valeur.
Mon objet de valeur classe est comme suit:
/* file UserVO.php*/
class UserVO
{
public $id;
public $email;
public function __construct($data)
{
$this->id = (int)$data['id'];
$this->email = $data['email'];
}
}
Et je créer un tableau d'objets de valeur comme suit:
/* file UserService.php*/
$array = array(
array(...),
array(...));
$count = count($array);
for ($i = 0; $i < $count; $i++)
{
$result[] = new UserVO($array[$i]);
}
return $result;
OK, ça fonctionne très bien. Cependant, j'aimerais specificy la VO qui est d'être créé dynamiquement, afin que je puisse avoir une seule fonction dynamique pour créer mon VO.
Quelque chose comme:
$ret = create_vo($array, 'UserVO');
function create_vo($data, $vo)
{
$count = count($data);
for ($i = 0; $i < $count; $i++)
{
$result[] = new $vo($data[$i]); //this obviously wont work...Class name must be a valid object or a string
}
return $result;
}
Je me rends compte que je pouvais le faire avec une instruction switch (itérer sur toutes mes VO)...mais il n'y a aucun doute un beaucoup beaucoup plus élégant. Il serait également supercool si je pouvais lazy load la VO est en tant que de besoin, au lieu d'avoir plusieurs 'comprend'
Toute aide appréciée.
OriginalL'auteur JonoB | 2010-09-10
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé? Il fonctionne comme prévu (en php 5.1, je ne sais pas comment c'était avec de la POO en php 4, mais si vous utilisez
__construct
pour le constructeur, cela devrait fonctionner).Pour éviter les inclusions multiples définir la fonction magique
__autoload
avant d'utiliser toute la classeAlors premier appel
new UserVo
va déclencher cette fonction pour inclure le fichier myclasses/UserVo.php.OriginalL'auteur dev-null-dweller
Il semble que include_once()'s et require_once()'s la performance est assez mauvais.
Ma suggestion:
Tuer tous les "require_once" et "include_once" et de créer un autochargeur. Enregistrer ce la mise en œuvre
OriginalL'auteur Macsen Liviu
Cela fonctionne
OriginalL'auteur Ollie
D'abord, la conversion de données d'un objet de tableau pour UserVO doit être fait avec ArrayObject
donc
Que vous essayez d'utiliser la méthode de fabrique de modèle et votre code semble être de droite, si vous disposez d'un oublié de définir $résultat dans un tableau ($result = array()).
Vous pouvez également utiliser le ReflectionClass de passer des arguments du constructeur ainsi que l':
"Autoload" votre UserVO objet, vous devez utiliser le spl_autoload_register fonction php include path.
OriginalL'auteur Steven Rosato