大话PHP 设计模式
PHP#
- 命名空间 主要解决同名函数的冲突问题 有点类似不同目录的同名文件的感觉
- 最初采用 include require 函数 后面采用自动加载函数
- 字体选择 source pro code
- php>5.3 后 废弃 __autoload () 启用 spl_autoload_rgister
psr-0 规范#
- 命名空间必须与绝对路径一致
- 类名首写字母必须大写
- 除入门文件外,其他 “.php” 必须只有一个类
开发复合 PSR-0 规范的基础框架#
- 全部使用命名空间
- 所有 php 文件必须自动载入,不能有 include/require
- 单一入口
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
Copy
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 设计模式
个人博客停止维护,部分博客转载到这
- 彼特城
- 2020-10-07 19:54:51
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: