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. zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译

    前言   方便做嵌入式arm的交叉移植zlib库.   Zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...

  2. @CreatedDate@CreatedBy@LastModifiedBy@LastModifiedDate

    启动类上加上@EnableJpaAuditing 实体类,注意需要加上@EntityListeners(AuditingEntityListener.class)这个注解才能使@CreatedDate ...

  3. ASP.NET Core教程:ASP.NET Core使用AutoMapper

    一.前言 在实际的项目开发过程中,我们使用各种ORM框架可以使我们快捷的获取到数据,并且可以将获取到的数据绑定到对应的List<T>中,然后页面或者接口直接显示List<T>中 ...

  4. web整合Spring和Hibernate

    上一篇是简单整合web和Spring, 这一篇是整合hibernate: 连接池c3p0: spring5.0, hibernate5.0 jars: ------------------------ ...

  5. 关于MYSQL5.7:Access denied for user 'root'@'localhost' (using password:YES)解决

    这一类解决要提供远程服务,需要进入mysql的my.ini文件中进行修改,但是在win10系统中,my.ini不再放在MYSQL安装目录的根目录中了,需要到一类应用缓存目录中寻找MYSQL的详细配置文 ...

  6. MongoDB查询或修改内嵌文档

    作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded) ...

  7. CPF 入门教程 - 各个控件介绍(八)

    CPF C#跨平台桌面UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) CPF 入门教程 - 绘图(四) CPF 入门 ...

  8. Python和java的选择

    它是什么? Java是一种通用的面向对象的编程语言,主要用于开发从移动应用程序到Web到企业应用程序的各种应用程序. Python是一种高级的面向对象的编程语言,主要用于Web开发,人工智能,机器学习 ...

  9. elasticsearch支持大table格式数据的搜索

    一.问题源起 数据情况 TableMeta, 保存table的元数据,通过fileId关联具体的GridFS文件: id name creator fileId 1 table1 mango f1 2 ...

  10. Linux内核学习之2号进程kthreadd

    Author       : Toney Email         : vip_13031075266@163.com Date          : 2020.12.04 Copyright : ...