首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP在创建新对象时传递参数,对象的call_user_func_array

PHP在创建新对象时传递参数,对象的call_user_func_array
EN

Stack Overflow用户
提问于 2010-03-31 11:40:55
回答 5查看 23.6K关注 0票数 22

我想动态创建一个PHP对象,参数是可选的。

例如,不这样做:

代码语言:javascript
复制
$test = new Obj($param);

我想做这样的事情(创建新ob是虚构的):

代码语言:javascript
复制
$test = create_new_obj('Obj', $param);

php中有这样的函数吗?类似于call_user_func_array的东西,但是是针对object的。

EN

回答 5

Stack Overflow用户

发布于 2014-09-11 15:51:01

从PHP5.6开始,您现在可以通过使用新的参数解包运算符(...),只需一行代码就可以实现这一点。

这里有一个简单的例子。

代码语言:javascript
复制
$className='Foo';
$args=['arg1','arg2','arg3'];

$newClassInstance=new $className(...$args);

有关详细信息,请参阅PHP Variable-length argument lists

票数 27
EN

Stack Overflow用户

发布于 2010-03-31 12:16:34

由于某些构造函数可能会接受数量可变的参数,因此应使用以下方法来适应它。

代码语言:javascript
复制
$r = new ReflectionClass($strClassName);
$myInstance = $r->newInstanceArgs($arrayOfConstructorArgs);

例如,如果您的Car构造函数采用3个参数

代码语言:javascript
复制
$carObj = new Car($color, $engine, $wheels);

然后

代码语言:javascript
复制
$strClassName = 'Car';
$arrayOfConstructorArgs = array($color, $engine, $wheels);
$r = new ReflectionClass($strClassName);
$carObj = $r->newInstanceArgs($arrayOfConstructorArgs);

http://php.net/manual/en/class.reflectionclass.php

http://php.net/manual/en/reflectionclass.newinstanceargs.php

票数 16
EN

Stack Overflow用户

发布于 2011-09-06 18:25:05

在这种情况下,我使用工厂方法。它们可以很容易地在抽象类中定义:

代码语言:javascript
复制
class Foobar {

    public function __construct($foo, $bar) 
    {
        // do something
    }

    static public function factory($foo, $bar) 
    {
        return new self($foo, $bar);
    }
}

有了这个,你可以使用call_user_func_array()

代码语言:javascript
复制
$my_foobar_obj = call_user_func_array('Foobar::factory', array($foo, $bar));
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2550354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档