让我们说我有一个我想要转换为值对象的数组.
我的值对象类如下:
/* 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.