PHP面向对象中的工作单元是什么

  介绍

本篇文章为大家展示了PHP面向对象中的工作单元是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>工作单元

这个模式涉及到了领域模型,数据映射器和标识映射,这里就统一进行整理和回顾了。

地点美元=new \吸引域\ \地点(null,“绿色Tree");

\吸引域\ \ ObjectWatcher::实例()→performoperation中();

现在以上面的二行客户端代码为切入点大概的叙述一下这个模式是怎么工作的。

第一句在使用领域模型对象创建一个对象的时候,它就调用了标识映射ObjectWatcher类

将自己标记为一个需要新增的对象。第二句的performoperation中方法将保存在标识映射器的属性新中美元的对象

插入到了数据库中。注意它内部调用美元的obj→仪()方法是领域模式中通过HelperFactory工厂类生成一个相对应的数据映射器类并返回过来。

HelperFactory这个类下面没有具体实现(原文也没有实现),其实就是根据参数传入的类的类型使用条件分支创建对应的数据映射器。

<强>下面直接看代码和注释进行理解。

namespace 吸引\域;//标识映射   class  ObjectWatcher {   ,,   private 才能;all 美元;=,数组();,,,,,,,,//存放对象的小仓库   private 才能;dirty 美元;=,数组();,,,,,,//存放需要在数据库中修改的对象   private 才能;new 美元;=,数组();,,,,,,,,//存放需要在数据库中新增的对象   private 才能;delete 美元;=,数组();,,,,,,//存放需要在数据库中删除的对象   private 才能;static  $实例,,,,,,,//单例   ,,   ,,   private 才能;function  __construct  () {}   ,,   static 才能;function 实例(){   ,,,如果(! self:: $实例){   ,,,,,self:: $ instance =, new  ObjectWatcher ();   ,,,}   ,,,return 自我::$实例;   ,,}   ,,//才能获取一个唯一的标识,这里采用了领域类类名+ ID的方式创建一个唯一标识,避免多个数据库表调用这个类时出现ID重复的问题   function 才能globalKey (DomainObject  obj美元){   ,,,key 美元;=,get_class (obj美元),只“干净,只obj→美元getId ();   ,,,return 美元关键;   ,,}   ,,//才能添加对象   static 才能;function 添加(DomainObject  obj美元){   ,,,inst 美元;=,self::实例();   ,,,本月美元→所有[美元本月→globalKey (obj美元)],=,obj美元;   ,,}   ,,//才能获取对象   static 才能;function 存在($ classname, $ id) {   ,,,inst 美元;=,self::实例();   ,,,key 美元;=,“$ classname id"美元;;   ,,,如果收取(本月→美元[$ key]) {   ,,,,,return 本月→美元(美元关键);   ,,,}   ,,,return 零;   ,,}   ,,//标才能记为需要删除的对象   static 才能;function  addDelete (DomainObject  obj美元){   ,,,self 美元;=,self::实例();   ,,,美元自→删除(自我→美元globalKey (obj美元)],=,obj美元;   ,,}   ,,//标才能记为需要修改的对象   static 才能;function  addDirty (DomainObject  obj美元){   ,,,inst 美元;=,self::实例();   ,,,如果(! in_array (obj,本月美元→新的,真实)){   ,,,,,本月美元→脏[美元本月→globalKey (obj美元)],=,obj美元;   ,,,}   ,,}   ,,//标才能记为需要新增的对象   static 才能;function  addNew (DomainObject  obj美元){   ,,,inst 美元;=,self::实例();   ,,,本月美元→新[],=,obj美元;   ,,}   ,,//标才能记为干净的对象   static 才能;function  addClean (DomainObject  obj美元){   ,,,self 美元;=,self::实例();   ,,,设置(美元自我→删除(自我→美元globalKey (obj美元)));   ,,,设置(自我→美元脏[美元自我→globalKey (obj美元)));   ,,,自我→美元new =, array_filter(美元自我→新功能(美元),使用(obj美元),{return  ! (a 美元;===,obj美元);});   ,,}   ,,,,//才能将上述需要增删改的对象与数据库交互进行处理,,   function 才能;performoperation中(){   ,,,foreach ($ this→dirty  as  $关键=祝辞obj美元){   ,,,,,美元obj→仪()→更新(obj美元),,,,,//美元obj→仪()获取一个数据映射器   ,,,}   ,,,foreach ($ this→new  as  $关键=祝辞obj美元){   ,,,,,美元obj→仪()→插入($ obj);   ,,,}   ,,,这个→美元dirty =,数组();   ,,,这个→美元new =,数组();   ,,}   }//领域模型   abstract  class  DomainObject{,,,,,//抽象基类   ,,   private 才能;id 美元;=,1;   ,,   function 才能;__construct  ($ id=null) {   ,,,如果(is_null ($ id)) {   ,,,,,这个→美元markNew(),,,,,,,//初始化时即被标记为需要新增的对象了   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

PHP面向对象中的工作单元是什么