php创建实例对象数组,php – 使用arguments数组创建新的对象实例

我正在尝试创建一个类的新实例:

$obj = new $class;

我这样做的方式是,一组通用函数会为许多类执行此操作,但现在我正在实现一些参数.现在虽然处理函数可能如下所示:

function newInst($argA = null, $argB = null, $argC = null)

这必须预先包含所有参数并且具有上限.所以,我正在尝试做这样的事情:

function newInst() {

$obj = new $class(func_get_args());

...

}

但我不想仅应用第一个参数,而是希望将数组应用为一组参数.我试过了

function newInst() {

$obj = new $class;

call_user_func_array(array($obj, '__construct'), func_get_args());

...

}

但是它会调用__construct函数两次.那么,有没有办法使用被调用函数的参数来创建一个在实例化过程中通过__construct或classname函数的新实例?

解决方法:

function createInstance($class, array $arguments) {

$reflection = new ReflectionClass($class);

return $reflection->newInstanceArgs($arguments);

}

反思提供了很多,尽管人们普遍声称它“很慢”,但反思将成为你应用程序的真正瓶颈;无论如何,任何可能的缓存都可以通过缓存来缓解.

根据讨论,我只是用count()检查和天真缓存来修改一个假设的解决方案;它仍然(肯定)需要分析.

function createInstance($class, array $arguments) {

static $cache = [];

switch (count($arguments)) {

case 0: return new $class();

case 1: return new $class($arguments[0]);

case 2: return new $class($arguments[0], $arguments[1]);

case 3: return new $class($arguments[0], $arguments[1], $arguments[2]);

}

if (!isset($cache[$class])) {

$cache[$class] = new ReflectionClass($class);

}

return $cache[$class]->newInstanceArgs($arguments);

}

标签:php,instance,class

来源: https://codeday.me/bug/20190620/1243405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值