我可以覆盖对序列化和Php类负责的函数到数组/ stdclass,这样我就可以实现自己的逻辑“就像根据条件隐藏某些属性一样”
class UserModel{
$hidden = ['password'];
function __construct(array $data) {
foreach($data as $key=>$value)$this->$key = $value;
}
}
$user = new UserModel(['id'=>1,'password'=>123]);
var_dump($user);
答案 0 :(得分:1)
如何实施Serializable interface? 看起来您可以通过实现接口方法来执行自定义逻辑。
示例:
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);
}
}
答案 1 :(得分:0)
您可以覆盖方法
请看下面的classe的小例子;
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);
}
}
您可以var_dump返回User->serialize
方法,并且密码将会显示。
如果您需要所有课程,则加密或散列您需要隐藏的所有变量。
以下是密码学中两种着名(但不安全)的方法:MD5
Ceaser cipher
完全理解散列和加密数据之间的区别
(哈希:https://en.wikipedia.org/wiki/MD5);
(CRYPTING:https://en.wikipedia.org/wiki/Caesar_cipher);
答案 2 :(得分:0)
对于简单的解决方案,您还可以使用__sleep Magic方法。
https://www.php.net/manual/en/language.oop5.magic.php
class UserModel {
protected $id;
protected $password;
protected $username;
protected $email;
public function __sleep(){
return array('id','username','email');
}
}