课程主要内容
1、PHP面向对象的高级特性
2、11种设计模式
3、PSR-0,Composer,Phar等最流行的技术
目标
掌握PHP各类设计模式,并具备设计纯面向对象框架和系统的能力
 
二、编程字体的选择    等宽字体 Courier New,Consolas,Source Code Pro(推荐),由Adobe公司专门为程序员设计,免费开源
 
三、命名空间  5.3以后增加
5.5之后,类自动载入    ,以前用 __autoload(),后被废弃,spl_autoload_register
PSR-0规范    1、命名空间必须与绝对路径一致    2、类名首字母必须大写    3、除入口文件外,其他‘.php’只有一个类
 
四、SPL标准库
栈,SplStack,先进后出,push,pop
队列,SplQueue,先进先出,enqueue,dequeue
最小堆,SplMinHeap,先进先出,insert,extract
固定长度的数组,SplFixedArray
链式操作,魔术方法 __get/__set, __call/__callStatic, __toString, __invoke
 
五、三种基础设计模式
工厂模式,工厂方法或类生成对象,而不是在代码里直接new
单例模式,使某个类的对象只允许被创建一次
注册树模式,全局共享和交换对象
 
六、适配器模式
1、可以将截然不同的函数接口封装成统一的API
2、实际应用举例,数据库操作有mysql,mysqli,pdo,可以用适配器模式统一成一致。类似的场景还有cache适配器,将memcache,redis,apc,file等不同的缓存函数统一成一致
 
七、策略模式
1、将一组特定的行为和算法封装成类,以适应特定的上下文环境
2、实际举例,假如一个电商系统,针对男女性用户展示不同的商品类目
3、可以实现Ioc,依赖倒置、控制反转
 
八、数据对象映射模式
1、是将对象和数据存储映射起来,对一个对象的操作可映射为对数据存储的操作
2、实现一个ORM类,对复杂的SQL语句映射成对象属性的操作
 
九、观察者模式
1、当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新
2、实现了低耦合,非侵入式的通知与更新机制
 
十、原型模式
1、与工厂模式类似,都是用来创建对象
2、先创建好一个原型对象,然后通过clone来创建新的对象,这样就免去了对象创建时重复的初始化操作
3、适用于大对象的创建,仅需内存拷贝即可
 
十一、装饰器模式
1、decorator,可以动态地添加修改类的功能
2、一个类提供了一项功能,如果要增加或修改额外的功能,传统的编程模式,需要写一个子类继承它,并重写相应的方法
3、使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性
array_reserve,array_rand
 
十二、迭代器模式
1、在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素
2、相对于传统的编程模式,可以隐藏遍历元素所需要的操作
\Iterator
 
十三、代理模式
1、在客户端与实体之间建立一个代理对象(proxy),客户端对实体操作全部委派给代理对象,隐藏实体的具体实现细节
2、Proxy还可以与业务代码分离,部署到另外的服务器,业务代码中通过RPC来委派任务
 
十四、面向对象设计的基本原则
1、单一职责:一个类只完成一个功能
2、开放封闭:一个类应该是可扩展的,不可修改的
3、依赖倒置:一个类不应该强依赖与另一个类,每个类对于另外一个类都是可替换的
4、配置化:尽可能使用配置,不要硬编码
5、面向接口编程:只需要关心接口,不需要关心实现
 
配置与设计模式
1、使用ArrayAccess实现配置文件的自动加载
 
 

韩天峰《大话PHP设计模式》听课笔记的更多相关文章

  1. HeadFirst设计模式读书笔记--目录

    HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...

  2. cs231n spring 2017 lecture9 CNN Architectures 听课笔记

    参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...

  3. 韩天峰博客 php基础知识学习记录

    http://rango.swoole.com 写好PHP代码真的不容易,给大家几个建议: 慎用全局变量,全局变量不好管理的,会导致你的代码依赖于全局变量,而耦合度太高. 一定不要复制粘贴代码,可重用 ...

  4. C#设计模式学习笔记-单例模式随笔

    最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...

  5. 设计模式学习笔记--备忘录(Mamento)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...

  6. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...

  7. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  8. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  9. Java设计模式学习笔记(四) 抽象工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...

  10. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

随机推荐

  1. apue——读目录操作

    头文件: #define _POSIX_C_SOURCE 200809L #include <sys/types.h> #include <sys/stat.h> #inclu ...

  2. 新系统添加sshkey/pexpect基本使用

    Ansible密码认证 //配置Inventory [db] 10.10.10.12 10.10.10.162 [db:vars] #给db组下的主机设置变量 ansible_ssh_user=&qu ...

  3. thrift使用

    一.什么是thrift Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务.它被当作一个远程过程调用(RPC)框架来使用,是由FaceBook为“大规模跨语言服务开发”而开 ...

  4. Hbase-site.xml

    生产环境基于 HA HDFS 的Hbase 基本优化后配置(无安全版本) hbase.rest.port 60050 hbase.cluster.distributed true hbase.root ...

  5. IDEA2019激活码集合(非盈利)

    56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2DIC4iLCJhc3NpZ25lZ ...

  6. 支付宝沙箱测试-ALI40247

    支付宝快速接入文档 测试支付宝APP支付时碰到ALI40247问题 前提:服务端采用沙箱测试. 关于沙箱 如何接入沙箱 沙箱环境是开放平台提供给开发者调试接口的环境,具体操作步骤见沙箱接入指南. Ap ...

  7. 分布式系列十五: MongoDB数据库

    MongoDB 是基于分布式文件存储的数据库. 开发语言是C++. 具有高性能,可扩展的特点. 是NoSql中最像关系数据库的. 什么是NoSql NoSQL 是 Not only SQL 的缩写. ...

  8. 2018-2019-2 20175235 实验二《Java面向对象程序设计》实验报告

    实验内容: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 一.单元测试 1伪代码 百 ...

  9. IMDB-二分类问题

    from keras.datasets import imdb from keras.utils.np_utils import to_categorical import numpy as np f ...

  10. 关于Android8及以上版本自定义广播无法接收问题

    高版本Android直接发送广播是无法接收的 e.g. sendBraodcast(intent); 需要在前面加上(前一个String为接收广播应用的项目地址,后一个为该广播类的地址) intent ...