• php 设计模式 --组合器模式


    PHP 开启错误显示并设置错误报告级别

    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'on');
     
    目的:分级处理;整体与结构 树结构;
    <?php
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'on');
    abstract class Company{
        protected $name;
        function __construct($name){
            $this->name=$name;
        }
        abstract function Add(Company $company);
        abstract function Remove(Company $company);
        abstract function Display($depth);
    }
    
    
    class SubCompany extends Company
    {
        private $sub_companys = array();
        function __construct($name){
            parent::__construct($name);
        
        }
        public function Add(Company $company){
            //echo 31;die;
            $this->sub_companys[] = $company;
        }
        function Remove(Company $company) {
            $key = array_search($company , $this->sub_companys);
            if ( $key != false) {
                unset($this->sub_companys[$key]);
            }
    
        }
        function Display($depth) {
        
            $pre = "";
            for($i=0 ; $i<$depth; $i++){
                $pre.="-";
            }
            $pre.=$this->name."<br/>";
            echo $pre;
    
            foreach ($this->sub_companys as $v ) {
                $v->Display($depth+2);
            }
        }
    } 
    
    class MoneyDept extends Company
    {
    
        function __construct($name){
            parent::__construct($name);
        }
    
        function Add(Company $company){
            echo "叶子节点,不能再添加。。。<br/>" ;
        }
        function Remove(Company $company) {
            echo "叶子节点,不能再删除。。。<br/>";
        }
        function Display($depth) {
            $pre = "";
            for($i=0 ; $i<$depth; $i++){
                $pre.="-";
            }
            $pre.=$this->name."<br/>";
            echo $pre;
        }
        
    }
    
    
    class ItDept extends Company
    {
    
        function __construct($name){
            parent::__construct($name);
        }
    
        function Add(Company $company){
            echo "叶子节点,不能再添加。。。<br/>";
        }
        function Remove(Company $company) {
            echo "叶子节点,不能再删除。。。<br/>";
        }
        function Display($depth) {
            $pre = "";
            for($i=0 ; $i<$depth; $i++){
                $pre.="-";
            }
            $pre.=$this->name."<br/>";
            echo $pre;
        }
        
    }
    
    
    $root = new SubCompany("北京总公司");
    //$a = new MoneyDept("总公司财务部");
    $root->Add(new MoneyDept("总公司财务部"));
    $root->Add(new ItDept("总公司技术部门"));
    
    
    
    $sh = new SubCompany("上海分公司");
    $sh->Add(new MoneyDept("上海分公司财务部"));
    $sh->Add(new ItDept("上海分公司技术部门"));
    $root->Add($sh);
    
    $root->Display(1);
    
    echo "<br>";
    $root->Remove($sh);
    $root->Display(3);
  • 相关阅读:
    哈希表
    c++中的虚函数
    struct并不报错
    c风格的字符串
    动态数组
    常量指针和指针常量
    关于struct和typedef struct
    常量成员函数
    关于free的使用疑惑
    mutable用于修改const成员函数中的成员变量
  • 原文地址:https://www.cnblogs.com/songyanan/p/12063321.html
Copyright © 2020-2023  润新知