1.1 设计模式
1.1.1 单例模式
一个类只能有一个对象
应用场景:多次请求数据库只需要一个连接对象
实现:三私一公
1、私有的静态属性用来保存对象的单例
2、私有的构造方法用来阻止在类的外部实例化
3、私有的__clone阻止在类的外部clone对象
4、公有的静态方法用来获取对象的单例
<?php
/**
* Created by PhpStorm.
* User: sankrua
* Date: 2020/12/1
* Time: 14:29
* 三私一公
*/
class DB{
//静态的属性用来保存对象的单例
private static $instance;
//私有的构造方法阻止在类的外部实例化
private function __construct()
{
}
//私有的__clone()阻止在类的外部clone对象
private function __clone()
{
// TODO: Implement __clone() method.
}
public static function getInstance(){
//保存的值不属于DB类的类型就实例化
if (!self::$instance instanceof self)
self::$instance=new self();
return self::$instance;
}
}
//测试
$db1=DB::getInstance();
$db2=DB::getInstance();
var_dump($db1,$db2);
1.1.2 工厂模式
特点:传递不同的参数获取不同的对象
<?php
/**
* Created by PhpStorm.
* User: sankrua
* Date: 2020/12/1
* Time: 14:50
*/
class ProductsA{
}
class ProductsB{
}
//工厂模式
class ProductsFactory{
public function create($num){
switch ($num):
case 1:
return new ProductsA();
case 2:
return new ProductsB();
default:
return null;
endswitch;
}
}
//测试
$factory=new ProductsFactory();
$obj1=$factory->create(1);
$obj2=$factory->create(2);
var_dump($obj1,$obj2);//object(ProductsA)#2 (0) { } object(ProductsB)#3 (0) { }
1.1.3 策略模式
特点:传递不同的参数调用不同的策略(方法)
<?php
/**
* Created by PhpStorm.
* User: sankrua
* Date: 2020/12/1
* Time: 14:57
*/
class Walk{
public function way(){
echo '走着去<br>';
}
}
class Bus{
public function way(){
echo '坐车去<br>';
}
}
//策略模式
class Student{
public function play($obj){
$obj->way();
}
}
//测试
$stu=new Student;
$stu->play(new Walk());//走着去
$stu->play(new Bus());//坐车去
1.2 序列化与反序列化
在PHP中,数组和对象无法保存,如果需要保存就要将数组或对象转换成一个序列
序列化:将数组或对象转换成一个序列(serialize)
反序列化:将序列化的字符串转换成数组或对象。(unserialize)
1.2.1 数组的序列化与反序列化
<?php
/**
* Created by PhpStorm.
* User: sankrua
* Date: 2020/12/1
* Time: 15:29
*/
//数组的序列化
/*$stu=['tom','berry','ketty'];
$str=serialize($stu);//序列化
file_put_contents('./stu.txt',$str);*/
//数组的反序列化
$str=file_get_contents('./stu.txt');
$stu=unserialize($str);//反序列化
print_r($stu);//Array ( [0] => tom [1] => berry [2] => ketty )
1.2.2 对象的序列化与反序列化
<?php
/**
* Created by PhpStorm.
* User: sankrua
* Date: 2020/12/1
* Time: 15:41
*/
class Student{
public $name;
protected $sex;
private $addr;
public function __construct($name,$sex,$addr)
{
$this->name=$name;
$this->sex=$sex;
$this->addr=$addr;
}
}
/*
//测试
$stu=new Student('tom','男','北京');
//序列化
$str=serialize($stu);
file_put_contents('./stu.txt',$str);*/
//反序列化,类的反序列化必须要有类的参与
$str=file_get_contents('./stu.txt');
$stu=unserialize($str);
echo '<pre>';
var_dump($stu);