Heim >Backend-Entwicklung >PHP-Tutorial >领域建模基类

领域建模基类

WBOY
WBOYOriginal
2016-07-25 08:48:161084Durchsuche
实现了延迟载入、注册为唯一
java要引入工厂和仓库的概念,而php只需要两三行代码就完成了同样的功能
  1. /**
  2. * 领域模型父类
  3. * 实现数据延迟载入、注册为唯一
  4. * @author liuxu
  5. *
  6. */
  7. abstract class Domain
  8. {
  9. protected $_id;
  10. protected $_id2;
  11. protected $_fields = array();
  12. protected $_loadedById = false;
  13. static protected $_objs;
  14. private function __construct($id,$id2=0)
  15. {
  16. $this->_id = $id?$id:0;
  17. $this->_id2 = $id2?$id2:0;
  18. }
  19. static public function factory($id,$id2=0)
  20. {
  21. $class = get_called_class();
  22. if(!isset(self::$_objs[$class][$id][$id2]))//注册为唯一
  23. {
  24. self::$_objs[$class][$id][$id2] = new $class($id,$id2);
  25. }
  26. return self::$_objs[$class][$id][$id2];
  27. }
  28. public function load($fields=array())
  29. {
  30. if($fields)
  31. {
  32. foreach($fields as $key=>$value)
  33. {
  34. $this->_fields[$key] = $value;
  35. }
  36. }
  37. }
  38. public function wash()
  39. {
  40. $this->_fields = array();
  41. }
  42. //载入完整数据
  43. abstract protected function loadById();
  44. public function __get($field)
  45. {
  46. if(!isset($this->_fields[$field]) && !$this->_loadedById)
  47. {
  48. //延迟载入
  49. $this->loadById();
  50. $this->_loadedById = true;
  51. }
  52. $value = isset($this->_fields[$field])?$this->_fields[$field]:null;
  53. return $value;
  54. }
  55. }
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:一些简单的php工具类 Nächster Artikel:十进制转二进制