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

本文介绍了如何使用PHP构建基于状态的责任链模式来实现审批流程,包括创建文案、层级审批、领导角色和文件操作。通过实例展示了编辑、领导审批的步骤,并提到了相关类和方法的使用,适合PHP开发者学习面向对象设计和权限管理。
摘要由CSDN通过智能技术生成

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

我们开发网站,除了前后,还有后台,除了内容管理,很多时候要涉及到『审批』。

比如:商务部要做个专题推广活动,活动中需要调用一些商品做优惠。

1、商务部编辑先写文案

2、商务部领导审批文案内容

3、商品部领导需要审批商品的价格和库存(万一没货呢)

4、后面可能还有好多领导要审批(带扩展)

今天我们要引入的模式是『责任链模式』

在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来,形成一条链条。请求在这个链条上传递,知道链条上的某一个对象决定处理次请求。发出这个请求的客户端并不知道链条上哪一个对象最终处理这个请求。

为了演示方便,我们做价格设定。

1、假定层级关系是:商品部领导>商务部领导>编辑

2、假设只能一级级审批(也就是不能跳级,仅为了演示方便)

3、这里审批暂时不能回退

a79c449eb34ad5d5d55968307530d1bb.png

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

show.php:

require('subject.php');

if ($_GET){

if (isset($_GET['createSubject'])){ //点击创建文案后执行

$subject = new subject();

$subject->content = '文案的内容';

$subject->save();

}

}

?>

责任链-审批

*{marign:0;padding:0}

.container{width:100%;margin: 0 auto;text-align: center}

流程演示界面

编辑创建文案


领导审批

编辑点击『创建文案』提交内容,然后把文案写到到本地json文件(保存)。文案的主题是subject.php:

class subject

{

public $content = ''; //文案内容

public $state = 0; //初试状态

/**

* 保存内容(编辑保存)

*/

public function save(){

//我们这里保存到本地文件

file_put_contents(__DIR__.'/subject.json',json_encode($this));

echo '文案已经创建成功';

}

}

这个时候文案已经创建好了,需要进入审批

抽象类(领导)manager.php :

abstract class manager

{

public $subject; //加载专题内容

public $mystate=0; //当前状态,这个很重要

public $leader=false; //重要,设置自己的领导是谁

public $myname = ''; //当前审批者的名字

/**

* 设置领导是谁

* @param $leader

*/

public function setLeader($leader)

{

$this->leader = $leader; //形成责任链的关键

}

public function __construct()

{

$str = file_get_contents(__DIR__.'/subject.json');

$this->subject = json_decode($str);

}

public function step($msg)

{

//很重要,代表审批

//只有当subject的state和自己的mystate相等是才会处理

if ($this->subject->state == $this->mystate){ //代表当前是自己要处理的

//在这执行审批通过的 具体

echo $msg . '审批制是:'.$this->myname;

//判断自己的是否有领导,如果有把控制权交给领导

if ($this->leader){

$this->subject->state = $this->leader->mystate; //交控制权

file_put_contents(__DIR__.'/subject.json',json_encode($this->subject)); //保存状态

}else{

echo '审批已经结束';

}

}else{

if ($this->leader){ //leader就是维护整个类的 链

//让自己的领导去审批

$this->leader->step($msg);

}

}

}

}

商务部领导,商品部领导,大boss都要继承这个抽象类。

BusinessLeader.php

class BusinessLeader extends manager

{

public $myname = '商务部领导';

public $mystate = 0;

}

ProductLeader.php:

class ProductLeader extends manager

{

public $myname = '商品部领导';

public $mystate = 1;

}

LastLeader.php

class LastLeader extends manager

{

public $myname = '终极领导';

public $mystate = 2;

}

在编辑提交文案之后,会进入『领导审批』阶段:

if (isset($_GET['step'])){ //进入领导审批阶段了

//这里面最关键是

//1.确定第一个领导是谁

//2. 要维护各个领导直接的关系,

require ('manager.php');

require ('BusinessLeader.php');

require ('ProductLeader.php');

require ('LastLeader.php');

$businessLeader = new BusinessLeader();

$productLeader = new ProductLeader();

$lastLeader = new LastLeader();

//下面还是维护关系

$businessLeader->setLeader($productLeader);

$productLeader->setLeader($lastLeader);

$businessLeader->step('审批通过');

}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值