调用构造函数方法时如何动态设置参数

时间:2019-08-06 07:26:45

标签: php

我的问题是用正确数量的参数动态构造构造函数的调用。

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个参数。如何将数组转换为正确的参数字符串?

1 个答案:

答案 0 :(得分:0)

使用reflection

$refClz = new ReflectionClass($class);
$objectReturn = $refClz->newInstanceArgs($arg);