2017-06-21 2 views
0

peut i remplacer la fonction qui est responsbile pour la sérialisation et la classe Php à un tableau/stdClass afin que je puisse mettre en œuvre ma propre logique « comme cacher certains attributs basés sur la condition)comment cacher les propriétés de la classe pendant la sérialisation?

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); 

Répondre

1

Que diriez-vous la mise en œuvre du Serializable interface? on dirait que vous pouvez faire votre logique personnalisée en appliquant les méthodes d'interface

Exemple:.

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

À la votre! thatns n'a pas le nom de l'interface, merci beaucoup – Zalaboza

0

vous pouvez remplacer une méthode

Regardez simplement le petit exemple de la classe ci-dessous;

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

Vous pouvez var_dump le retour de la méthode User->serialize et mot de passe ne sera montré.

Si vous avez besoin de toute votre classe, cryptez ou hachez toutes les variables que vous devez masquer.

Voici deux célèbres (mais dangereux) méthode cryptologie: MD5Ceaser cipher

comprennent juste bien la différence entre les données de hachage et crypting

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

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

+0

problème est que je ne contrôle pas comment et quand cette classe pourrait être sérialisée, donc je veux remplacer la méthode de sérialisation par défaut php – Zalaboza

+0

Je ne vous recommande pas de le faire, utilisez plutôt un cryptage ou un hachage méthode pour cacher des données spécifiques – Drumz