php – 使用arguments数组创建新的对象实例
发布时间:2020-12-13 17:24:38 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试创建一个类的新实例: $obj = new $class; 我这样做的方式是,一组通用函数会为许多类执行此操作,但现在我正在实现一些参数.现在虽然处理函数可能如下所示: function newInst($argA = null,$argB = null,$argC = null) 这必须预先包含所有参数并且
我正在尝试创建一个类的新实例:
$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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |