Php 如何在序列化期间隐藏类的属性?
我是否可以将负责序列化的函数和Php类重写为array/stdclass,以便实现我自己的逻辑“比如根据条件隐藏某些属性”)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-
如何实施该计划? 看起来您可以通过实现接口方法来实现自定义逻辑 例如:
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');
}
}