php 数组 对象 转换

来源:互联网 发布:浙江灯具进出口数据 编辑:程序博客网 时间:2024/05/26 15:54

1.利用反射技术

class T

{
    public function objToArray()
    {
        $arry = array();
        $isAllEmpty = true;
        $class = new ReflectionClass(get_class($this));
        foreach($class->getProperties() as $p) {
            foreach($class->getMethods(ReflectionMethod::IS_PUBLIC) as $m) {
                $mName = $m->getName();
                if(0 === stripos($mName, 'get') && 0 === strcasecmp(substr($mName, 3), $p->getName())) {
                    $value = $class->getMethod($mName)->invoke($this);
                    if(!empty($value)) {
                        $isAllEmpty = false;
                    }
                    $arry[$p->getName()] = $value;
                    break;
                }
            }
        }
        if($isAllEmpty) {
            $arry = null;
        }
        return $arry;
    }

    protected static function arrayToObj($arr, $className)
    {
        $obj = null;
        if(is_array($arr)) {
            $class = null;
            try {
                $class = new ReflectionClass($className);
            } catch(Exception $e) {
                throw $e;
            }
            if(!empty($class)) {
                $obj = $class->newInstance();
                foreach($arr as $key => $value) {
                    $find = false;
                    foreach($class->getProperties(ReflectionProperty::IS_PRIVATE) as $p) {
                        if(0 === strcasecmp($key, $p->getName())) {
                            foreach($class->getMethods(ReflectionMethod::IS_PUBLIC) as $m) {
                                $mName = $m->getName();
                                if(0 === stripos($mName, 'set') && 0 === strcasecmp(substr($mName, 3), $key)) {
                                    $class->getMethod($mName)->invoke($obj, $value);
                                    $find = true;
                                    break;
                                }
                            }
                            break;
                        }
                        if($find) {
                            break;
                        }
                    }
                }
            }
        }
        return $obj;
    }
}
0 0
原创粉丝点击