gpt4 book ai didi

php - 在 PHP 中实例化新类实例时的参数打包和解包

转载 作者:行者123 更新时间:2023-12-01 06:13:47 26 4
gpt4 key购买 nike

在 Python 中,您可以像这样打包和解包参数:

def myfunction(arg1, arg2, arg3):
pass

mydict = dict(arg1='foo', arg2='bar', arg3='baz')

myfunction(**mydict)

mylist = ['foo', 'bar', 'baz']

myfunction(*mylist)

现在,PHP 中有类似的东西吗?我有一个传递给函数的类,以及从数据库记录中提取的关联数组。我想创建该类的一个实例,它接受与数组中的键命名相同的参数。可以吗?

编辑

好吧,所以我肯定没有正确地表达我的问题。当我事先既不知道类名也不知道参数数量时,我想动态实例化一个新类。

我已经找到答案了:

http://php.net/manual/en/book.reflection.php

解决方案如下:

class MyClass {
public function __construct($var1, $var2, $var3) {
echo "$var1\n";
echo "$var2\n";
echo "$var3\n";
}
}

$reflector = new ReflectionClass('MyClass');
$args = array('var1'=>'foo', 'var2'=>'baz', 'var3'=>'bar');
$instance = $reflector->newInstanceArgs($args);

最佳答案

不,您不能直接执行此操作,您必须手动从数组中提取值并将它们传递给构造函数,或者更改它以使其接受数组作为参数。

您可以看看call_user_func_array但我认为您不能将它与构造函数一起使用,因为您需要对象的实例来调用其方法之一。

关于php - 在 PHP 中实例化新类实例时的参数打包和解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417117/

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