PHP动态类加载

标签 php class

假设我有一个要转换为值对象的数组。

我的值对象类如下:

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

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

然后我按如下方式创建我的值对象数组:

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

好的,所以一切正常。但是,我想指定要动态创建的 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;
}

我意识到我可以使用 switch 语句(遍历我所有的 VO)来做到这一点……但毫无疑问,这是一个更优雅的解决方案。如果我可以根据需要延迟加载 VO,而不是有多个“包含”,那也太酷了

非常感谢任何帮助。

最佳答案

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

你试过了吗?它按预期工作(在 php 5.1 中,我不知道它与 php 4 中的 OOP 有何关系,但如果您使用 __construct 作为构造函数,这应该可以工作)。

为了避免多次包含,在使用任何类之前定义魔法函数__autoload

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

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

关于PHP动态类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685902/

相关文章:

php - 无法同步条件数据透视表多对多关系 Laravel

php - CakePHP:具有默认值的日期字段

javascript - 在页面上强制实现 Firebase 身份验证

java - 在匿名或本地内部类中访问匿名或本地内部类

c++ - 在对象的另一个类中创建实例

php - 如何在 php 中定义类的属性?

C++ 使用方括号和指向实例的指针

php - 如何为表格的每一行放置一个表格

PHP GD : Bad quality on resize?

java - 在 Java 运行时尝试从 jar 文件加载类时出现 ClassNotFoundException