PHP动态类加载

Jon*_*noB 11 php class

让我们说我有一个我想要转换为值对象的数组.

我的值对象类如下:

/* file UserVO.php*/
 class UserVO
 {
    public $id;
    public $email;

     public function __construct($data)
     {
         $this->id = (int)$data['id'];
         $this->email = $data['email'];
     } 
 }
Run Code Online (Sandbox Code Playgroud)

我创建了我的值对象数组,如下所示:

/* file UserService.php*/
$array = array(
array(...),
array(...));
$count = count($array);
for ($i = 0; $i < $count; $i++)
{
   $result[] = new UserVO($array[$i]);
}
return $result;
Run Code Online (Sandbox Code Playgroud)

好的,所以一切正常.但是,我想具体说明要动态创建的VO,这样我就可以使用一个动态函数来创建我的VO.

就像是:

$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;
}
Run Code Online (Sandbox Code Playgroud)

我意识到我可以通过switch语句(迭代我所有的VO)来做到这一点......但毫无疑问,这是一个更优雅的解决方案.如果我可以根据需要懒惰加载VO,而不是多个'包含',它也将是超级冷却

任何帮助非常感谢.

dev*_*ler 13

$result[] = new $vo($data[$i]); //this obviously wont work...Class name must be a valid object or a string
Run Code Online (Sandbox Code Playgroud)

你试过吗?它的工作方式与预期的一样(在php 5.1中,我不知道它是如何在php 4中使用OOP的,但是如果你使用的__construct是构造函数,这应该可行).

__autoload在使用任何类之前,要避免多个包含定义魔术函数

function __autoload($className)
{
    require_once 'myclasses/'.$className.'.php';
}
Run Code Online (Sandbox Code Playgroud)

因此,第一次调用new UserVo将触发此函数以包含文件myclasses/UserVo.php.