组合模式应用于递归结构的优化或分层数据结构的管理:
& lt; ?php
抽象类公司
{
保护美元名称;
/*公共职能__construct(美元名称)
{
$ this→名称=$名称;
}, */
公共,抽象函数添加(公司公司美元);
公共,抽象函数(公司公司美元)移动;
公共,抽象函数显示(水平=0美元);}
类SubCompary延伸公司
{
私人数组$ SubCompary=();
//保护美元名称;
公共职能__construct(美元名称)
{
//父::$ name=$名称;
$ this→名称=$名称;
}
公共函数添加(公司公司美元)
{
如果(! $公司)
{
返回false;
}
$关键=函数(公司,这个→美元SubCompary);
if($键===false)
{
$ this→SubCompary[]=美元公司;
}
返回true;
}
公共职能转移(公司公司美元)
{
如果(! $公司)
{
返回false;
}
$关键=函数(公司,这个→美元SubCompary);
if($关键!==false)
{
设置($ this→SubCompary [$ key]);}
返回true;
}
公共函数显示(水平=0美元)
{
//输出本节点的名称
if ($ this→名称)
{
$="之前,
(i=0; i<美元美元水平;美元我+ +)
{
前美元。=?”;
}
回声。以前这→美元的名字。& lt; br/祝辞,
}
//按层次输出每个分层的节点的名称
如果(is_array ($ this→SubCompary))
{
foreach ($ this→SubCompary美元关键=比;美元值)
{
//递归输出每层的节点名称
//递归输出每层的节点名称
美元价值→显示(水平+ 2美元);}
其他}
{
}
}
}
类部门延伸公司
{
私人部门美元=()数组;
//保护美元名称;
公共职能__construct(美元名称)
{
//父::$ name=$名称;
$ this→名称=$名称;
}
公共函数添加(公司公司美元)
{
/*如果(! $公司)
{
返回false;
}
$关键=函数(公司,这个→美元dapartment);
if($键===false)
{
$ this→dapartment[]=$本;
返回true;
}
其他{
返回false;
} */
回声的叶子节点不能增加节点!”;
}
公共职能转移(公司公司美元)
{
/*如果(! $公司)
{
返回false;
}
$关键=函数(公司,这美元→部门),
if($关键!==false)
{
设置($ this→部门[$ key]);
返回true;
}其他
{
返回false;
} */
回声的叶子节点不能删除节点!”;
}
公共函数显示(水平=0美元)
{
如果(! $ this→名称)
{
返回false;
}
="以前美元;
(i=0; i<美元美元水平;美元我+ +)
{
前美元。=?”;
}
回声。以前这→美元的名字。& lt; br/祝辞,
/*如果(is_array ($ this→部门))
{
foreach ($ this→部门关键美元=比;美元值)
{
美元价值→显示(水平+ 2美元);}
其他}
{
返回false;
} */}
}
头(“的content - type: text/html; charset=utf - 8 ');
subcompary美元=new subcompary(“北京公司”);
美元subcompary→添加(新部门(“总公司财务部”)),
美元subcompary→添加(新部门(“总公司技术部”)),
上海美元=new subcompary(“上海分公司”);
$上海→添加(新部门(“上海分公司技术部”)),
$上海→添加(新部门(“上海分公司财务部”)),
美元subcompary→添加(上海)美元;
subcompary→美元显示(2);
?在