>백엔드 개발 >PHP 튜토리얼 >도메인 모델링 기본 클래스

도메인 모델링 기본 클래스

WBOY
WBOY원래의
2016-07-25 08:48:161084검색
实现了延迟载入、注册为唯一
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. }
复制代码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.