Php 如何在序列化期间隐藏类的属性?

Php 如何在序列化期间隐藏类的属性?,php,serialization,getter-setter,Php,Serialization,Getter Setter,我是否可以将负责序列化的函数和Php类重写为array/stdclass,以便实现我自己的逻辑“比如根据条件隐藏某些属性”) 如何实施该计划? 看起来您可以通过实现接口方法来实现自定义逻辑 例如: class UserModel implements Serializable { // returns string public function serialize() { $data = array( 'id' => $this-

我是否可以将负责序列化的函数和Php类重写为array/stdclass,以便实现我自己的逻辑“比如根据条件隐藏某些属性”)


如何实施该计划? 看起来您可以通过实现接口方法来实现自定义逻辑

例如:

class UserModel implements Serializable {

    // returns string
    public function serialize() {
        $data = array(
            'id' => $this->id,
            'password' => null, // or omit password
            'email' => $this->email,
            ...
        );
        return serialize($data);
    }
}

您可以覆盖一个方法

看看下面这个类的小例子

 class User { 
 //To hide
 private $pass;

 //To show
 private $log;
 private $nbPoints;

  {...}
  public function serialize()
  {
    $arr = [];
    $arr['LOG'] = $this->log;
    $arr['POINTS'] = $this->nbPoints;
    return ($arr);
  }
}
您可以对
User->serialize
方法的返回进行var_转储,并显示密码

如果您需要所有类,则对所有需要隐藏的变量进行加密或散列

密码学中有两种著名的(但不安全的)方法:
MD5
Ceaser-cipher

只是要很好地理解散列和加密数据之间的区别

(散列:)


(加密:);

对于一个简单的解决方案,您也可以使用“睡眠魔法”方法


问题是我无法控制该类的序列化方式和时间,所以我想覆盖php默认的序列化方法我不建议您这样做,而是使用加密或哈希方法隐藏特定的数据!这不是接口名称,非常感谢
 class User { 
 //To hide
 private $pass;

 //To show
 private $log;
 private $nbPoints;

  {...}
  public function serialize()
  {
    $arr = [];
    $arr['LOG'] = $this->log;
    $arr['POINTS'] = $this->nbPoints;
    return ($arr);
  }
}
class UserModel {
    protected $id;
    protected $password;
    protected $username;
    protected $email;

    public function __sleep(){
       return array('id','username','email');
    }
}