听欢哥来扒一扒PHP的设计模式

设计模式的宗旨就是:重用。

在面向对象中,类是用于生成对象的代码模版,而设计模式是用于解决共性问题的代码模版。

遵循这样的模板,我们可以设快速地设计出优秀的代码。

注意,设计模式只是模板,不是具体的代码。

它是为了代码复用,增加可维护性。

在学习设计模式的时候,有几个概念让我很难接受,这可能是从过程式编程转到面向对象编程的禁锢。

假设有这样一个对象:

classPerson{private$name ='Human';publicfunctiongetName(){return$this->name;    }}

1 变量保存对象

不要觉得变量只能保存整形数字,数组和字符串,变量还可以保存对象的:

$man =newPerson;echo$man->getName();

2 传递对象参数

如果另一个类用到了Person类的属性或方法,那直接穿进去就可以了:

classStudent{publicfunction__construct($person){echo$person->getName();    }}// 传递对象,最后输出字符串“Human”$jack =newStudent(newPerson);

但是这样有一个小问题,当传递给newStudent()不是一个Person对象时,如下,

$jack =newStudent('abc');

程序就会报错。于是有了第三种做法,限定参数的类型。

3 限定传递参数的类型

在传递参数的时候,就限定参数的类型,这样写:

classStudent{publicfunction__construct(Person$person){echo$person->getName();    }}// 传递对象,$jack =newStudent(newPerson);

这样,传给newStudent()的参数必须是Person的实例。

4 用类属性保存对象

还有一种经常用到的做法,就是用一个类的属性保存对象或对象集合。如下:

classLife{public$persons = [];publicfunctionaddPerson(Person $person){$this->persons[] = $person;    }}$class =newLife();$class->addPerson(newPerson);$class->addPerson(newPerson);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,Dream

It Possible。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,694评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,006评论 18 399
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,855评论 0 9
  • Prilgrim阅读 864评论 0 0
  • 很高兴并感谢这个包裹能来到你的身边,店里的两位小伙伴在无线的另一端期待着你打开包裹的样子,愿它不负你所望,带给你想...
    高小钙阅读 2,844评论 0 0