大话PHP 设计模式

PHP
  • 命名空间 主要解决同名函数的冲突问题 有点类似不同目录的同名文件的感觉
  • 最初采用 include require函数 后面采用自动加载函数
  • 字体选择 source pro code
  • php>5.3 后 废弃 __autoload() 启用 spl_autoload_rgister
psr-0 规范
  • 命名空间必须与绝对路径一致
  • 类名首写字母必须大写
  • 除入门文件外,其他“.php”必须只有一个类
开发复合PSR-0规范的基础框架
  1. 全部使用命名空间
  2. 所有php 文件必须自动载入,不能有include/require
  3. 单一入口
php标准库 spl库
栈(先进后出)
$stack = new SplStack   
入栈 
$stack  ->push('data1\n');
$stack  ->push('data2\n');
出栈
echo $stack->pop();
echo $stack->pop();
结果: data2  data1`
队列(先进先出)
$squeue = new SpalQueue();
入列
$squeue->enqueue('data1\n');
$squeue->enqueue('data2\n');
出队
echo $queue->dequeue();
echo $queue->dequeue();
结果:data1 data2
 堆(可以取值) 
最小堆列子
$heap = new SplMinHeap;
$heap ->insert('data1\n');
$heap ->insert('data2\n');
提取
$heap->extract();
$heap->extract();
结果:data1 data2
 固定长度数组  
$arrray = new SplFixedArray(10);
$array[0] = 1;
$array[9] = 123;
var_dump($array); 未被赋值的键值为null
  • php框架链式操作是因为数据库类里的方法返回了 $this

  • PHP魔术方法 __get/__set __call/__calStatic __toString __invoke

大话设计模式

三种常见的

  • 工厂模式 工厂方法或者类生成对象,而不是代码直接NEW 用静态方法封装替换 new 对象操作

  • 单例模式 使某个类的对象仅需允许创建一个 多个php文件 只连接一次数据库 外层类调用用内 层私有的__construct() 会报错 在新建一个单例方法来实现

  • 注册树模式 全局共享和交换对象 set uset get 方法的使用

  • 适配器模式 将各种截然不同的接口封装成同意API

    举列 php 三种数据库连接方式mysql mysqli pdo 统一一致的API PHP各种memcache redis file apc缓存函数缓存 统一成一致API

  • 策略模式:将某些特定的行为和算法封装成类,以适应某些特定的上下文环境

    举列 某一个电商网站 针对男女性用户跳转到不同商品类目 并展示不同广告 使用策略模式 可以实现ioc 依赖倒置 和控制反转

  • 数据对象映射模式 对象和sql查出的数据绑定 __construct() __destruct()

  • 观察者模式 当一个对象发生改变的时候,它依赖的对象会全部收到通知并自动更新

  • 原型模式 先创建好一个对象 然后通过clone 创建 适用于大对象的创建 原型模式仅需内存拷贝即可

  • 装饰器模式 可以动态的添加修改类的功能 子类重写父类提供了很大灵活性

  • 迭代器模式 在不需要了解内部实现的前提下 遍历一个聚合对象的内部元素 可以隐藏遍历元素的所需操作 需要继承、Iterator 实例 获取某个表的全部数据

  • 代理模式 客户端与实体建立一个代理对象 客户端对实体进行操作 全部委派给代理对象 隐藏实体的具体实现细节 实例 操作主从数据库

面向对象基本原则:单一职责 开放封闭 依赖倒置 配置化 面向接口编程而不是面向实现

MVC 技术架构

  • php中使用ArrayAccess实现配置文件的加载
  • 在工厂方法中读取配置,生成可配置化的对象
  • 使用装饰器实现权限验证,模板渲染,JSON串行
  • 使用观察者模式实现数据更新事件的一系列更新操作
  • 使用代理模式实现数据库的主从自动切换

来源慕课地址 http://www.imooc.com/learn/236 笔记 可以前往更清楚的认识Php 设计模式

彼特城博客
请先登录后发表评论
  • latest comments
  • 总共0条评论