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);

php 设计模式 --组合器模式的更多相关文章

  1. 6. 星际争霸之php设计模式--建造器模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  3. C#设计模式-装饰器模式(Decorator Pattern)

    引言 当我们完成一个软件产品开发后就需要对其进行各种测试,适配快速迭代下质量的保障.当有一个完善的产品的对象后,如果我们想要给他添加一个测试功能,那么我们可以用一个新的类去装饰它来实现对原有对象职责的 ...

  4. 设计模式-装饰器模式(Decrator Model)

    文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6057666.html 目录 1.概述 2.目的 3.结构组成 4.实现 5.总结 1.概 ...

  5. 说说设计模式~装饰器模式(Decorator)

    返回目录 装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序, ...

  6. Java设计模式--装饰器模式到Java IO 流

    装饰器模式 抽象构件角色:给出一个抽象接口,以规范准备接受附加责任的对象. 具体构件角色:定义准备接受附加责任的对象. 抽象装饰角色:持有一个构件对象的实例,并对应一个与抽象构件接口一致的接口. 具体 ...

  7. C#设计模式--装饰器模式

    0.C#设计模式-简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C# ...

  8. Head First 设计模式 —— 装饰器模式

    1. 装饰器模式与继承 与装饰器模式相比,继承更容易造成类爆炸: 装饰器模式:利用组合取代继承:

  9. 从ES6重新认识JavaScript设计模式: 装饰器模式

    1 什么是装饰器模式 向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式(Decorator Pattern),它是作为现有的类的一个包装(Wrapper). 可以将装饰器理解 ...

随机推荐

  1. NOIP 模拟 $30\; \rm 毛二琛$

    题解 \(by\;zj\varphi\) 原题问的就是对于一个序列,其中有的数之间有大小关系限制,问有多少种方案. 设 \(dp_{i,j}\) 表示在前 \(i\) 个数中,第 \(i\) 个的排名 ...

  2. adobe cc 系列产品更改默认安装路径方法

    通过Adobe Creative Cloud 修改 1.在开始菜单中找到图下程序点开,并进行如下操作: 2.点击Apps位置 等待加载出软件,如图下所示. 点击右上角图标,会弹出以下窗口,点击首选项 ...

  3. C# AppDomain 详解

    AppDomain 详解 AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现代码隔离的基本机制.每一个AppDomain可以单独运 ...

  4. mybatis学习日志之总结

    一.介绍mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  5. 莫逸风CSDN文章目录

    『Ⅱ』-----随笔 莫逸风CSDN文章目录 The Programmer's Oath程序员的誓言-- 今天突发奇想写了一个小工具,CSDN文章目录生成器 vue去掉一些烦人的校验规则 输入npm ...

  6. 何时覆盖hashCode()和equals()方法

    The theory (for the language lawyers and the mathematically inclined): equals() (javadoc) must defin ...

  7. 简陋的Excel到MYSQL的数据传输JAVA实现

    实现从excel读取数据,使用的是jxl.jar(到处都有,请大家随意下载),其中封装好了通过excel提供的接口,对excel中的数据库进行读取的实现: 先为了熟悉其中的方法使用,做了以下的测试: ...

  8. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类

    package util; import java.io.File; import java.io.InputStream; import java.sql.Connection; import ja ...

  9. ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别

    ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别 ScheduledThreadPoolExecut ...

  10. OVN架构

    原文地址 OVN架构 1.简介 OVN,即Open Virtual Network,是一个支持虚拟网络抽象的系统. OVN补充了OVS的现有功能,增加了对虚拟网络抽象的原生(native)支持,比如虚 ...