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