12
votes

Chargement de la classe dynamique PHP

permet de dire que j'ai une matrice que je veux convertir en un objet de valeur.

Ma classe d'objet de valeur est la suivante: p>

$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;
}


0 commentaires

4 Réponses :


14
votes
function __autoload($className)
{
    require_once 'myclasses/'.$className.'.php';
}

0 commentaires

0
votes

Premièrement, la conversion des données vers un objet de tableau pour UserVo doit être effectuée avec ArrayObject

SO P>

$rc = new ReflectionClass($vo);
$rc->newInstanceArgs($data[$i]);


0 commentaires

0
votes

Ceci fonctionne

<?

class UserVO
{
    public $id;
    public $email;

    public function loadData($data)
    {
        $this->id = (int)$data['id'];
        $this->email = $data['email'];
    }
}

function create_vo($data, $vo)
{
    $count = count($data);
    for ($i = 0; $i < $count; $i++)
    {
        $tmpObject = new $vo;
        $tmpObject->loadData($data[$i]);
        $result[] = $tmpObject;
        unset($tmpObject);
    }
    return $result;
}


$data = array();
$data[] = array('id'=>1,'email'=>'data@example.com');
$data[] = array('id'=>2,'email'=>'data@example.com');
$data[] = array('id'=>3,'email'=>'data@example.com');
$data[] = array('id'=>4,'email'=>'data@example.com');
$data[] = array('id'=>5,'email'=>'data@example.com');
$data[] = array('id'=>6,'email'=>'data@example.com');

$result = create_vo($data,'UserVO');

var_dump($result);

?>


0 commentaires

1
votes

Il semble que include_once () ' s et require_once () la performance est plutôt mauvaise .

Ma suggestion:

Tuez tous "exiger_once" et "incluse_once" et créez un autochargeur. Enregistrez ce implémentation


1 commentaires

Votre chargeur automatique utilise toujours inclus ou besoin qu'il ne charge pas tout de suite que lorsqu'il est nécessaire de sorte que votre argument n'est pas le plus valable. Comme l'utilisation de l'autochargeur est plus de charge.