2017-06-21 62 views
0

我可以重載函數,恕不承擔序列化和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); 

回答

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); 
    } 
} 
+0

乾杯! Thatns沒有接口名稱,非常感謝 – Zalaboza

0

您可以覆蓋的方法

只要看下面類的小例子;

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方法和密碼將不被顯示。

如果你需要所有的類,然後隱藏或散列所有變量,你需要隱藏。

這裏是密碼學中的兩個著名的(但不安全的)方法:MD5Ceaser cipher

才明白好散列和crypting DATAS的區別

(HASH:https://en.wikipedia.org/wiki/MD5);

(CRYPTING:https://en.wikipedia.org/wiki/Caesar_cipher);

+0

問題是我不控制如何以及何時這個類可能被序列化,所以我想覆蓋PHP的默認序列化方法 – Zalaboza

+0

我不建議你這樣做,而是使用加密或哈希隱藏特定數據的方法 – Drumz

相關問題