抽象类(领导)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常见数据库操作技巧汇总》