php-nacos icon indicating copy to clipboard operation
php-nacos copied to clipboard

Model::decode()容错处理方案

Open FooMake opened this issue 3 years ago • 0 comments

此方法会遍历$instanceJson参数并将值渲染到调用此方法的子类属性,如果$instanceJson和子类的属性不匹配,则会报找不到方法的错误

原方法如下

    public static function decode($instanceJson)
    {
        $instance = new static();
        foreach (json_decode($instanceJson) as $propertyName => $propertyValue) {
            $instance->{"set" . ucfirst($propertyName)}($propertyValue);
        }
        return $instance;
    }

方法改进

    public static function decode($instanceJson)
    {
        $instance = new static();

        foreach (json_decode($instanceJson, true) as $propertyName => $propertyValue) {
            $method = "set" . ucfirst($propertyName);
            // 在此处增加判断方法是否存在判断,如$instanceJson返回多余参数,则不进行渲染
            if (method_exists($instance, $method)) {
                $instance->{$method}($propertyValue);
            }
        }

        return $instance;
    }

FooMake avatar Dec 13 '21 09:12 FooMake