PHP 设计模式--基础
设计模式的宗旨就是:重用。
在面向对象中,类是用于生成对象的代码模版,而设计模式是用于解决共性问题的代码模版。
遵循这样的模板,我们可以设快速地设计出优秀的代码。
注意,设计模式只是模板,不是具体的代码。
它是为了代码复用,增加可维护性。
在学习设计模式的时候,有几个概念让我很难接受,这可能是从过程式编程转到面向对象编程的禁锢。
假设有这样一个对象:
class Person
{
private $name = 'Human';
public function getName()
{
return $this->name;
}
}
1 变量保存对象
不要觉得变量只能保存整形数字,数组和字符串,变量还可以保存对象的:
$man = new Person; echo $man->getName();
2 传递对象参数
如果另一个类用到了Person类的属性或方法,那直接穿进去就可以了:
class Student
{
public function __construct($person)
{
echo $person->getName();
}
}
// 传递对象,最后输出字符串“Human”
$jack = new Student(new Person);
但是这样有一个小问题,当传递给new Student()不是一个Person对象时,如下,
$jack = new Student('abc');
程序就会报错。于是有了第三种做法,限定参数的类型。
3 限定传递参数的类型
在传递参数的时候,就限定参数的类型,这样写:
class Student
{
public function __construct(Person $person)
{
echo $person->getName();
}
}
// 传递对象,
$jack = new Student(new Person);
这样,传给new Student()的参数必须是Person的实例。
4 用类属性保存对象
还有一种经常用到的做法,就是用一个类的属性保存对象或对象集合。如下:
class Life
{
public $persons = [];
public function addPerson(Person $person)
{
$this->persons[] = $person;
}
}
$class = new Life();
$class->addPerson(new Person);
$class->addPerson(new Person);
var_dump($class->persons);
输出值:
array(2) {
[0]=>
object(Person)#2 (1) {
["name":"Person":private]=>
string(5) "Human"
}
[1]=>
object(Person)#3 (1) {
["name":"Person":private]=>
string(5) "Human"
}
}
5 小结
面向对象的设计模式都是围绕上面的情形,做一些组合之后形成的。
所以,理解类之间关系才是重点。
PHP 设计模式--基础的更多相关文章
- 设计模式基础:类及类关系的UML表示
设计模式基础:类及类关系的UML表示 2009-10-26 17:00 by 宗哥, 1891 阅读, 1 评论, 收藏, 编辑 UML中,类关系分为这几种,泛化(generalization), 实 ...
- JavaScript设计模式基础(二)
JavaScript 设计模式基础(一) 原型模式 在以类为中心的面向对象编程语言中,类和对象的关系就像铸模和铸件的关系,对象总是从类中创建.而原型编程中,类不是必须的,对象未必从类中创建而来,可以拷 ...
- JavaScript设计模式基础(一)
模式的起源 模式 起源于建筑学.20世纪70年代,哈佛大学建筑学博士Christopher Alexander和他的团队花大约20年,来研究为解决同一个问题而设计出的不同建筑结构,从中发现那些高质量设 ...
- java设计模式--基础思想总结--父类引用操作对象
看设计模式的相关书籍也有一段时间了,一开始其实是抱着作为java三大框架的基础知识储备来学习的,不过到后来,才发现,在设计模式的一些准则装饰下,java的面向对象威力才真正地体现出来,后面的将会陆续地 ...
- Python设计模式 - 基础 - 七大基本原则
提倡使用设计模式,主要出发点就是实现代码复用,增加代码的扩展性和可维护性.如何设计出简洁.易懂.灵活.优美的代码结构的确是一门学问,透彻理解并践行如下七大原则通常都能取得基本满意的结果: - 单一职责 ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
- java设计模式--基础思想总结--抽象类与架构设计思想
抽象类?这个东西我感觉没什么卵用啊,又不能拿来new对象,没有具体的对象的抽象类,有什么实际的意义呢?这是很多刚刚接触java抽象类语法时的第一反应(当然,包括我).确实,很多刚刚接触抽象类这个概念的 ...
- java设计模式基础 - 解决某一类问题最行之有效的方法,框架是大的设计模式.
一.单例模式(Singleton) 1.单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1>某 ...
- JavaScript设计模式基础之this、call、apply
1.this的指向 除去不常用的with和eval,具体应用中this指向大概能分为4种情况分别是 1.作为对象的方法调用. 2.作为普通函数的方法调用. 3.Function.prototype.c ...
- JS设计模式基础
设计模式: 通过封装.继承.多态.组合等技术的反复使用,提炼出一些可重复使用的面向对象设计技巧. 1.多态(’做什么‘和’谁去做‘分开) 多态指同一个实体同时具有多种形式. 同一操作应用于不同的对象上 ...
随机推荐
- SIGSEGV 和 SIGBUS & gdb看汇编
参考这篇文章: http://blog.chinaunix.net/uid-24599332-id-2122898.html SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信 ...
- vmware9.0 install ubuntu
1)安装vmware 9.0 + 注册码2)因为是.bundle文件,执行下列命令:sudo chmod +x VMware-Workstation-7.1.1-282343.i386.bundle ...
- BestCoder Round #61 (div.2) C.Subtrees dfs
Subtrees 问题描述 一棵有N个节点的完全二叉树,问有多少种子树所包含的节点数量不同. 输入描述 输入有多组数据,不超过1000组. 每组数据输入一行包含一个整数N.(1\leq N\leq ...
- 20170621_oracle练习
========================= 启动Oracle ========================= --->启动OracleOraDb11g_home1TNSListene ...
- java.io.IOException: The same input jar is specified twice
简介: eclipse android proguard 打包时出现 java.io.IOException: The same input jar is specified twice 错误, 这里 ...
- mysql的启动和停止
1.检查数据库服务器是否开启:任务管理器-->后台进程-->查看mysqld是否存在.存在说明开启了,反之没开启 2.管理员运行cmd,输入重启指令:net start **(**数据库名 ...
- hebernate基础学习2---属性
---------------------------------------------------------------------------------------------------- ...
- Gym - 101972B Arabella Collegiate Programming Contest (2018) B. Updating the Tree 树DFS
题面 题意:T组数据,每次给你1e5个点的树(1为根),每个点有一权值,询问1-n每个节点的子树中, 至少修改几个点的权值(每次都可以任意修改),才能让子树中任意2点的距离==他们权值差的绝对值 无解 ...
- unittest举例
步骤:1.先导入unittest2.编写一个测试类(继承unittest.TestCase)3.编写测试用例类,一个方法就是一条用例4.加载测试用例,有三种方式:加载测试方法,加载测试类,加载测试模块 ...
- Linux搭建tomcat文件服务器
Linux搭建tomcat文件服务器 Linux下配置Tomcat服务器和Windows下其实差不多,可以去官网下载安装包释放或者在线下载,只是当时下载的windows.zip文件,现在下载.tar. ...