php组合

为了提高代码的复用性,降低代码的耦合(组合实现的两种方式)

模式一:

 1 <?php
 2 //组合模式一
 3 class Person{
 4     public function eat(){
 5         echo "eat.<br/>";
 6     }
 7 }
 8
 9 class Phone{
10     public function call(){
11         echo "phone call.<br/>";
12     }
13 }
14
15 //学生也需要call()这个方法,为了提高代码的复用性(组合)
16 class Student extends Person{
17     private $people;
18     public function learning(){
19         echo "learn.<br/>";
20     }
21     public function func($class, $method){//兼容多个类的多个方法
22         $this->people = new $class;
23         $this->people->$method();
24     }
25 }
26
27 $student = new Student();
28 $student->eat();
29 $student->func(‘Phone‘, ‘call‘);
30 $student->learning();

模式二:

 1 <?php
 2 //组合模式二
 3 class Person{
 4     public function eat(){
 5         echo "eat.<br/>";
 6     }
 7 }
 8
 9 trait Drive{
10     public function call(){
11         echo "phone call.<br/>";
12     }
13 }
14
15 class Student extends Person{
16     use Drive;
17     public function learning(){
18         echo "learn.<br/>";
19     }
20 }
21
22 $student = new Student();
23 $student->eat();
24
25 //当方法或属性同名时,当前类中的方法会覆盖 trait的 方法,而 trait 的方法又覆盖了基类中的方法
26 $student->call();
27 $student->learning();

时间: 2024-10-05 04:55:23

php组合的相关文章

[js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表

所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理,由主板,电源,内存条,显卡, 机箱,显示器,外设等组成的 把一个成型的产品组成部件,分成一个个独立的部件,这种方式可以做出很多灵活的产品,这就是组合模式的优势 比如:家用台式机电脑,要求配置比较低, 这个时候只需要主板+电源+内存条+机箱+显示器+外设就可以了,不需要配置独立显卡 鸡腿堡+鸡翅+紫薯

组合模式(Composite)

一.组合模式介绍 组合模式:将对象组合成树形结构以表示:部分--整体 的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. java中的组合是指:在A类里定义一个B类的引用,A拥有了B,叫组合.只是单纯的组合而已,而不是一种设计模式. 组合和组合模式不是一回事! 基本上见到的树形结构都使用到了组合模式. 组合模式结构图: 组合模式中有几个核心的部分: Leaf(叶子):表示该节点下面没有其他子节点了,就称为叶子 Compostie(容器构件):容器构件,该节点下还有其他子节点,理解

webform:分页组合查询

一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql">SQL语句</param> /// <param name="hh">哈希表</param> /// <returns></returns> public List<Goods> Select(string un

字符串排列组合算法

第二个算法是我笔试题遇到的,当时没有做出来,在网上看到别人写的算法,感觉太精妙了,就在这里分享出来. 全排列 所谓全排列,就是打印出字符串中所有字符的所有排列.例如输入字符串abc,则打印出 a.b.c 所能排列出来的所有字符串 abc.acb.bac.bca.cab 和 cba . #include<stdio.h> #include<string.h> static int number=0; void Swap(char *a ,char *b) { char temp =

WebForm 分页与组合查询

1.封装实体类 2.写查询方法 //SubjectData类 public List<Subject> Select(string name) { List<Subject> list = new List<Subject>(); cmd.CommandText = "select *from Subject where SubjectName like @a "; cmd.Parameters.Clear(); cmd.Parameters.Add

UVALive-7304 - Queue of Soldiers 【动态规划】【组合函数】【好题】

UVALive- 7304 - Queue of Soldiers 题目链接:7304 题目大意:士兵过山洞,必须以类似7 6 5 4 3 2 1顺序过.在第i个人之后,比i高的人都会被杀死,问如果要杀死k个人,有几种排队方法. 题目思路:先将士兵的身高离散化.假设N表示不同身高的数目.cnt[i] 表示i这个身高的人有多少个.(i的范围为1~N)sum[i]表示小于等于该身高段的士兵数目 然后开始dp,dp[i][j]表示已经到第i个士兵,已经死了j个人的方法数. 第三维遍历,q表示,第i+1

关于继承和组合的一点总结

入行时一直用c++写端游的逻辑,对这两者的区别几乎是0. 最先意识到有不同是在看了设计模式之后,但也没啥自己想法,代码照旧,只是依稀有个印象:都说组合好,少用继承. 用c++的那段时间对这句经验是没多少感受的.后来用erlang.lua.go开始自己设计搭建基础框架,这才在编码层级感受到两者的巨大不同. 一个印象非常深的例子:上个手游项目MOBA大改造,首先要做个类似dota的开房间系统,5v5. 想想房间也就是个小号地图嘛,便着手把嵌在活动中的地图代码扣了出来.做成单独的功能类,LogicMa

组合选择符

在 CSS3 中包含了四种组合方式: 后代选取器(以空格分隔) 子元素选择器(以大于号分隔) 相邻兄弟选择器(以加号分隔) 普通兄弟选择器(以破折号分隔) 1. 后代选取器 所有 <p> 元素插入到 <div> 元素中   <p><div></div></p> div p{background:yellow} 2. 子元素选择器 <div>元素中所有直接子元素 <p>  <div><p>

【BZOJ-1974】auction代码拍卖会 DP + 排列组合

1974: [Sdoi2010]auction 代码拍卖会 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 305  Solved: 122[Submit][Status][Discuss] Description 随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代码库.猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库.iPig不想把代码库给所有想要的小猪,只想给其中的一部分既关系好又肯出钱的小猪,于是他决定举行了一个超大型拍

使用脚本选项及组合条件测试

使用脚本选项及组合条件测试: 整数测试: -le 小于等于 -lt 小于 -ge大于等于 -gt大于 -eq等于 -ne不等于 字符测试: == 等于 != 不等于 >大于 <小于 -n 测试字符串是否为空,空为真 -z 测试字符串是否不为空,不空为真 文件测试: -e 测试文件是否存在 -f 测试文件是否为普通文件 -d测试文件是否为目录 -r测试文件是否有读权限 -w测试文件是否有写权限 -x 测试文件是否有执行权限 组合测试条件 -a 逻辑与 都满足 -o 逻辑或 满足一条即可 !  非