这篇文章将为大家详细讲解有关使用PHP怎么实现一个基于状态的责任链审批模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
show.php:
<?php
require('subject.php');
if ($_GET){
if (isset($_GET['createSubject'])){ //点击创建文案后执行
$subject = new subject();
$subject->content = '文案的内容';
$subject->save();
}
}
?>
<html>
<head>
<title>责任链-审批</title>
<style>
*{marign:0;padding:0}
.container{width:100%;margin: 0 auto;text-align: center}
</style>
</head>
<body>
<div class="container">
<div><h3>流程演示界面</h3></div>
<form method="get" action="show.php">
<div class="row">
<textarea name="" id="" cols="30" rows="10"></textarea>
<div>
<button name="createSubject">编辑创建文案</button>
</div>
</div>
<div class="row">
<hr>
<button name="step">领导审批</button>
</div>
</form>
</div>
</body>
</html>
编辑点击『创建文案』提交内容,然后把文案写到到本地json文件(保存)。文案的主题是subject.php:
<?php
class subject
{
public $content = ''; //文案内容
public $state = 0; //初试状态
/**
* 保存内容(编辑保存)
*/
public function save(){
//我们这里保存到本地文件
file_put_contents(__DIR__.'/subject.json',json_encode($this));
echo '文案已经创建成功';
}
}
这个时候文案已经创建好了,需要进入审批
抽象类(领导)manager.php :
<?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
<?php
class BusinessLeader extends manager
{
public $myname = '商务部领导';
public $mystate = 0;
}
ProductLeader.php:
<?php
class ProductLeader extends manager
{
public $myname = '商品部领导';
public $mystate = 1;
}
LastLeader.php
<?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怎么实现一个基于状态的责任链审批模式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。