宝哥软件园

PHP实现基于状态的责任链审批模式详解

编辑:宝哥软件园 来源:互联网 时间:2021-08-23

本文阐述了PHP实现基于状态的责任链审批模式。分享给大家参考,如下:

当我们开发一个网站时,不仅有正面和背面,还有背景。除了内容管理,还经常涉及“审批”。

比如商务部要举办一个特别的促销活动,活动期间要号召一些商品优惠。

1.商务部的编辑先写文案。2.商务部领导批准复制内容。3.商品部门的领导需要批准商品的价格和库存(以防缺货)。4.以后可能会有很多领导批准(扩大)

我们今天要介绍的模式是“责任链模式”

在责任链模式中,许多对象通过每个对象对其主页的引用而连接起来,形成一个链。在知道链中的对象决定处理第二个请求的情况下,请求在这个链中传输。发出此请求的客户端不知道链中的哪个对象最终处理此请求。

为了便于演示,我们定了价格。

1.假设层级关系如下:商品部牵头业务部门牵头编辑;2.假设只能进行一级审批(即不能跳过,只是为了方便演示);3.此处的审批暂时无法回滚

(上图:演示界面的show.php)

show.php:

?PHP require(' subject . PHP ');If ($ _ get) {if (isset ($ _ get ['创建主题'])} {//单击创建副本,然后执行$ subject=new subject();$subject-content='副本的内容';$ subject-save();} }?Html标题责任链-审批/标题样式* { marign:0padding:0 }。容器{宽度:100%;margin: 0 autotext-align : center }/style/head body Div class=' container ' Div H2流程演示界面/h2/Div表单方法=' get ' action=' show . PHP ' Div class=' row ' text area name=' id=' cols=' 30 ' row=' 10 '/text area Div按钮名称=' create subject '编辑并创建副本/Button/Div/Div class=' row ' hrbutton name=' step ' leader approves/Button/Div/form/Div/body/htmledit,单击“创建副本”这篇文章的主题是主题

?phpclass主题{ public $ content=//复制内容public $ state=0;//初始测试状态/* * *保存内容(编辑保存)*/公共函数保存(){ //我们将其保存到本地文件file _ put _ contents(_ dir _ _)。/subject.json ',JSON _ encode($ this));回声“副本已成功创建”;}}此时,副本已经创建,需要审批

抽象班(组长)manager.php :

?phpabstract类管理器{ public $ subject//加载特殊内容public $ mystate=0;//当前状态,这个很重要。public $ leader=false//重要,设置谁是你的领导公众$ myname=//当前审批人姓名/* * *谁是集领导* @ param $ leader */公共函数集领导($ leader){ $ this-leader=$ leader;//形成责任链的键} public function _ _ construct(){ $ str=file _ get _ contents(_ dir _ _)。/subject . JSON’);$ this-subject=JSON _ decode($ str);} public function step($msg) {//非常重要,表示认可。//If($ this-subject-state==$ this-mystate)只有在主体的状态等于自己的mystate时才会被处理。{//表示当前正在自行处理。//这里传递的具体echo $msg审批系统是:'。//判断自己是否有领导,如果有,把控制权交给领导if($ this-leader){ $ this-subject-state=$ this-leader-神秘;//file _ put _ contents (_ _ dir _ _ . '/subject.json ',JSON _ encode($ this-subject));//保存状态}else{ echo '审批已结束';} } else { if($ this-leader){//leader是维护全班的链条//让你自己的领导批准$ this-leader-step($ msg);}}}}商务部、商品部、大老板的领导要继承这个抽象类。

BusinessLeader.php

?phpclass BusinessLeader扩展了经理{ public $myname='商务部领导;public $ mystate=0;}ProductLeader.php:

?phpclass ProductLeader扩展了管理器{ public $myname='商品部领导;public $ mystate=1;}LastLeader.php

?LastLeader扩展了管理器{ public $myname='终极领导;public $ mystate=2;}在编辑提交文案之后,会进入『领导审批』阶段:

if(isset($ _ GET[' step ']){//进入领导审批阶段了//这里面最关键是//1.确定第一个领导是谁//2.要维护各个领导直接的关系,要求('经理。PHP’);要求('业务领导。PHP’);需要(' ProductLeader。PHP’);需要(' LastLeader。PHP’);$ business leader=new business leader();$ ProductLeader=new ProductLeader();$ LastLeader=new LastLeader();//下面还是维护关系$ business leader-set leader($ ProducT leader);$ product Leader-设置Leader($最后一个Leader);$businessLeader-step('审批通过');}更多关于服务器端编程语言(专业超文本预处理器的缩写)相关内容感兴趣的读者可查看本站专题: 《php面向对象程序设计入门教程》 、 《PHP数组(Array)操作技巧大全》 、 《PHP基本语法入门教程》 、 《PHP运算与运算符用法总结》 、 《php字符串(string)用法总结》 、 《php+mysql数据库操作入门教程》 及《php常见数据库操作技巧汇总》

希望本文所述对大家服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。

更多资讯
游戏推荐
更多+