今天朋友面试遇到的问题:php如何阻止一个类被序列化,首先我想到的是使用serialize函数进行序列化对象首先会检查对象是否存在__sleep方法,如果有的话先调用__sleep方法。
(1).普通序列化对象代码:
class member
{
/**
* 年龄
* @var int
*/
private $age = 26;
/**
* 姓名
* @var string
*/
private $name = '高久峰';
}
$member = new Member();
$text = serialize($member);
var_dump($text);(2).通过类中增加__sleep方法阻止对象被序列化
class member
{
/**
* 年龄
* @var int
*/
private $age = 26;
/**
* 姓名
* @var string
*/
private $name = '高久峰';
/**
* @throws Exception
*/
public function __sleep()
{
throw new \Exception('this class not support serialize');
}
}
$member = new Member();
$text = serialize($member);
var_dump($text);现在如果序列化会抛出异常阻止
(3).__sleep的作用是可以自定义返回需要序列化的字段,如果我们的对象属性比较多,但是我们不需要全部序列化保存,可以自定义,例如
class member
{
/**
* 年龄
* @var int
*/
private $age = 26;
/**
* 姓名
* @var string
*/
private $name = '高久峰';
/**
* 过滤类属性
*/
public function __sleep()
{
return ['age'];
}
}
$member = new Member();
$text = serialize($member);
var_dump($text);这样序列化只能序列化age属性,name属性不会被序列化
//参数1 文件名 参数2 缩放比例 function _thumb($_filename,$_percent){ ob_clean();...
在项目中需要对图片进行裁剪,前端裁剪完成发送base64给后端,但是很意外的PHP获取到的数据和前端有点差距,之前我都是先加密,后端解密,但是这次依然不行。于是使用filter_input方法轻松解决。$base64 = filter_input(INPUT_POST...
在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...
项目中使用服务来执行webservice,由于对方系统api不稳定,经常导致服务崩溃,只能重启,一个月差不多要重启一次。初期的解决办法是捕获异常,然后continue掉。<?php try { $url = 'http...
(1).学习的目标:学会创建父子进程,并且能够区分当前进程是父还是子;了解父进程执行过程,子进程执行过程;能够用多进程执行任务(2).相关函数学习: (2.1)pcntl_fork()执行时: &nbs...
在项目下的composer配置文件修改(PaySdk是我这里一个支付sdk的目录,包含各种各样的支付sdk,这样写的意思让composer自动把PaySdk下的所有文件自动加载):"autoload": { &...