PHP设计模式

笔记内容来自慕课 大话PHP设计模式

一、面向对象的高级特性

这里主要是学习 第三章、命名空间和Autoload 和 第四章、PHP面向对象 2章的内容笔记

命名空间 namespace

类自动载入

旧的方法

1
2
3
4
5
6
7
8
9
10
11
12
Test1::test();
Test2::test();
function __autoload($class){
require __DIR__ . '/' . $class . '.php';
}
spl_autoload_register('autoload2');
function autoload2(){
require __DIR__ . '/' . $class . '.php';
}

PSR-0规范内容:

  1. 命名空间必须与绝对路径一致
  2. 类名首字母必须大写
  3. 除入口文件外,其他.php必须只有一个类

开发符合psr-0规范的基础框架

  1. 全部使用命名空间
  2. 所有php文件必须自动载入,不能有include/require
  3. 单一入口

SPL库的使用(php标准库)

主要参考文档:php标准库

  1. SplStack、SplQueue、SplHeap、SplFixedArray等数据结构类
  2. ArrayIterator、AppendIterator、Countable、ArrayObject
  3. SPL提供的函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$stack = new SplStack();
$stack->push("data1\n");
$stack->push("data2\n");
echo $stack->pop(); // data2
echo $stack->pop(); // data1
$queue = new SplQueue();
$queue->enqueue("data1\n");
$queue->enqueue("data2\n");
echo $queue->dequeue(); // data1
echo $queue->dequeue(); // data2
// 堆 (最小结构堆)
$heap = new SplMinHeap();
$heap->insert("data1\n");
$heap->insert("data2\n");
echo $heap->extract(); // data1
echo $heap->extract(); // data2
// 固定尺寸(长度)的数组
$array = new SplFixedArray(10);
$array[0] = 123;
$array[9] = 1234;

php链式操作

链式操作实现: $db->where()->get();

每个方法有返回值

php魔术方法的使用

  1. get/set:
  2. call/callstatic:
  3. __toString:
  4. __invoke: 将一个php对象当做一个函数执行

二、设计模式

3种基本设计模式

  1. 工厂模式:工厂方法或者类生产对象,而不是在代码中直接new
  2. 单例模式:使某个类的对象仅允许创建一个
  3. 注册模式:全局共享和交换对象

其他设计模式

适配器模式
策略模式
数据对象映射模式
观察者模式
原型模式
装饰器模式
迭代器模式
代理模式

一、工厂模式