我的问题是用正确数量的参数动态构造构造函数的调用。
PHP7
我创建了一个函数createObjectFromJson
,该函数从json文件创建对象的实例。对象类已经存在,构造函数方法可以接收0个或多个参数。
我有一个数组,其中包含json属性列表,以传递给对象的构造函数。
我的问题是使用正确数量的参数动态构造构造函数的调用。
<?
trait jsonHelper {
static function jsonToObject(string $json) {
$constructArgument = ["foo"=>["p1","p2"]];
$class = __CLASS__;
$jsonArray = json_decode($json, true);
// construit les arguments à passer au constructeur
$arg;
if(isset($constructArgument[$class])) {
$arg = [];
foreach($constructArgument[$class] as indice=>$constructArgument)
$constructArgumentValue;
if(isset($jsonArray[$constructArgument])){
$constructArgumentValue = $jsonArray[$constructArgument];
}
array_push($arg, $jsonArray[$constructArgument]);
}
}
$objectReturn = new $class($arg);
foreach($objectReturn as $key=>$value){
// initialize each properties
....
}
}
}
class Foo {
Use jsonHelper;
public $p1;
public $p2;
function __construct($p1, $p2){
$this->p1 = $p1;
$this->p2 = $p2;
}
}?>
使用此代码,我遇到以下错误:
未捕获的ArgumentCountError:函数的参数太少 Foo :: __ construct()。
我知道我传递的是1个参数(一个数组),而不是预期的2个参数。如何将数组转换为正确的参数字符串?
答案 0 :(得分:0)
使用reflection:
$refClz = new ReflectionClass($class);
$objectReturn = $refClz->newInstanceArgs($arg);