PHP中可以将类的对象进行序列化,转为可以保存和传输的字符串。
用户自定义异常处理类,以应对更多异常情况。
使用匿名类直接创建一次性对象,可以代替一些简单的完整类
1. 对象序列化
- 使用
serialize()
函数序列化对象,__sleep()
指定可以序列化的属性 - 使用
unserialize()
还原对象,__wakeup()
设置还原对象时自动完成的程序
<?php
//对象的序列化,__sleep()、__wakeup()
class Merchant
{
public $name = '安心小区便利店';
protected $num = '80108480A';
private $updateDate = '15099098909';
private $phone = '18093309099';
protected $cardno = null;
public function getUpdateDate()
{
return $this->updateDate;
}
//序列化时自动调用
public function __sleep()
{
return ['name','num'];
}
//反序列化时自动调用
public function __wakeup()
{
$this->updateDate = '2020-5-5';
}
}
$merchant = new Merchant;
//序列化对象,只序列化了name和num两个属性
echo $str = serialize($merchant);
//输出:O:8:"Merchant":2:{s:4:"name";s:21:"安心小区便利店";s:6:"*num";s:9:"80108480A";}
//反序列化,自动调用了__wakeup(),为更新日期重新赋值
$obj = unserialize($str);
echo $obj->getUpdateDate();//2020-5-5
2. 异常类
- PHP异常处理类
Exception
,抛出程序执行异常 - 用户可以自定义异常处理类,需继承系统
Exception
类
//自定义异常信息处理
class loginException extends Exception
{
public function __construct($message,$code){
$this->code = $code;
$this->message = $message;
}
//重写异常信息输出格式
public function __toString()
{
return __CLASS__.':登录失败!['.$this->code.']:'.$this->message;
}
}
try{
$username = $_GET['username'];
$password = $_GET['password'];
if($username !='admin'){
throw new loginException('用户名不存在',1);
}elseif($password !='1234qwer'){
throw new loginException('密码错误',2);
}
}catch(loginException $e){
echo $e;
}
//访问地址传参?username=admin&password=12345
//输出:loginException:登录失败![2]:密码错误
//访问地址传参?username=sds&password=1234qwer
//输出:loginException:登录失败![1]:用户名不存在
3.匿名类
- 匿名类,php7开始支持的功能,使用
new class{}
,直接完成类的创建和实例化
//匿名类
//匿名类实现接口功能
interface iA{
public function sum(...$a);
}
$res = (new class implements iA{
public function sum(...$a){
return array_sum($a);
}
})->sum(1,4,665,65);
echo $res;//735
//匿名类作为函数参数使用
function field(object $obj,array $field){
return $obj->toStr($field);
}
$field = ['id','name','adress'];
echo field(new class{
public function toStr(array $arr){
$arr = array_map(function($itme){
return $itme = '`'.$itme.'`';
},$arr);
return implode(',',$arr);
}
},$field);//`id`,`name`,`adress`