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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使用arguments数组创建新的对象实例脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_512_1@
我正在尝试创建一个类的新实例:

$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函数的新实例?

解决方法

如果您不反对使用反射: ReflectionClass::newInstanceArgs

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 – 使用arguments数组创建新的对象实例全部内容,希望文章能够帮你解决php – 使用arguments数组创建新的对象实例所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。