让我们说我有一个数组,我想转换成一个值对象.
我的值对象类如下:
/* 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';
}
所以首先调用新的UserVo将触发此函数以包含文件myclasses / UserVo.PHP.