属性数组 foreach ($vars as $name => $value) { $this->$name = isset($para[$name]) ? $para[$name] : $value; # 取参数中的或者默认值 } } /** * 从对象加载数据(赋值给自己的字段) * @param array/Object $obj */ public function LoadFrom($obj) { if (func_num_args() != 1 || is_null($obj)) { # 防御: 参数数量不对 die("too many args or arg obj was null!"); } $para = is_array($obj) ? $obj : (array) $obj; # 转关联数组 $vars = get_class_vars(get_class($this)); # 后期绑定,获得实例的实际类名称=>属性数组 foreach ($vars as $name => $value) { if (isset($para[$name])) { $this->$name = $para[$name]; # 取参数中的或者默认值 } } return $this; } public function __toString() { # 用json_encode覆盖下toString()方法 return $this->toString(); } /** * @return 将自身数据序列化为json串. */ public function Json() { return JsonUtil::encode($this); } public function toString() { # 还没想好要不要留一个显式的toString()方法 $str = $this->Json(); return $str; } /** * @param bool $lower 是否返回小写字符串,默认值false, 返回大写字符串 * @return string 计算自身数据序列化为json串后的MD5值(大写16进制) */ public function MD5($lower = false) { $str = $this->Json(); return $lower ? md5($str) : strtoupper(md5($str)); } }