gpt4 book ai didi

PHP动态类加载

转载 作者:可可西里 更新时间:2023-10-31 22:12:13 27 4
gpt4 key购买 nike

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

我的值对象类如下:

/* 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com