Object_ext.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * 扩展对象的一些通用方法
  5. * 使用方法: $var = new XX($obj); ... 用完后注意进行回存.(相当于克隆一个原始对象,若需覆盖原始对象记得回存操作)
  6. * @version
  7. * 1.0.1 改名, PHP 7以后的语法中已经将Object作为关键字 --gwang 2017年8月2日
  8. * 1.0.0 Created at 2017-3-28. by --gwang
  9. * @author gwang (mail@wanggangzero.cn)
  10. * @copyright ? 2017-3-28, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  11. */
  12. class Object_ext {
  13. /**
  14. * 默认构造函数,能够智能提取关联数组或者是object中的字段进行初始化.
  15. * Ps. 不会进行递归类型检查, php的serilize函数也没有附带字段的类型信息
  16. */
  17. function __construct($arg = null) {
  18. if (func_num_args() != 1 || is_null($arg)) {
  19. return;
  20. }
  21. $para = is_array($arg) ? $arg : (array) $arg; # 关联数组
  22. $vars = get_class_vars(get_class($this)); # 后期绑定,获得实例的实际类名称=>属性数组
  23. foreach ($vars as $name => $value) {
  24. $this->$name = isset($para[$name]) ? $para[$name] : $value; # 取参数中的或者默认值
  25. }
  26. }
  27. /**
  28. * 从对象加载数据(赋值给自己的字段)
  29. * @param array/Object $obj
  30. */
  31. public function LoadFrom($obj) {
  32. if (func_num_args() != 1 || is_null($obj)) {
  33. die("too many args or arg obj was null!");
  34. }
  35. $para = is_array($obj) ? $obj : (array) $obj; # 转关联数组
  36. $vars = get_class_vars(get_class($this)); # 后期绑定,获得实例的实际类名称=>属性数组
  37. foreach ($vars as $name => $value) {
  38. if (isset($para[$name])) {
  39. $this->$name = $para[$name]; # 取参数中的或者默认值
  40. }
  41. }
  42. return $this;
  43. }
  44. public function __toString() {
  45. return $this->toString();
  46. }
  47. public function toString() {
  48. $str = JsonUtil::encode($this);
  49. return $str;
  50. }
  51. }