当前位置:首页 > PHP > 正文内容

php __sleep,php阻止一个类被序列化,php __sleep作用

高老师5年前 (2020-07-14)PHP1436

今天朋友面试遇到的问题: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属性不会被序列化

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/143.html

分享给朋友:

“php __sleep,php阻止一个类被序列化,php __sleep作用” 的相关文章

php生成验证码

php生成验证码

<?php //高先生简单验证码. //随机数 //为什么循环0-15的数字 //因为要实现最简单的字母和数字混搭 //16进制0-9   a-f //dechex 十进制转换为16进制 //创建一个四位的验证码. //$nmsg.  ...

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php官方的超全局变量$_SERVER['PHP_SELF']也能直接获取,只不过如果url参数太多也会获取。下面提供一个方法获取/*  * 获取当前PHP文件名称  */ if (!function_exists('phpself&#...

php trait的使用

php trait的使用

PHP不像net支持多继承,自身只支持单继承,为了解决这个问题,php出了Trait这个特性,减少单继承语言的限制。并且能让代码复用率更高。说白了就是一个对象的属性和方法扩展工具一样。例如:trait exts {     public f...

PHP中的ArrayAccess用法详解

PHP中的ArrayAccess用法详解

php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class  studen...

php上传大文件,php大文件上传

php上传大文件,php大文件上传

(1).前端文件:<form action="upload.php" method="post" enctype="multipart/form-data">    &...

PHP异常处理,PHP自定义错误,PHP记录错误日志

PHP异常处理,PHP自定义错误,PHP记录错误日志

面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...