作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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/
为什么 pickle 重用现有的 Python 类“C”而不是从 pickle 字节重建类?有没有一种方法可以在没有副作用的情况下 pickle 和解 pickle ? 这是我的回复 session
我是一名优秀的程序员,十分优秀!