Page 1 sur 1

Création d'un attribut non défini d'un objet ?! L'empecher ?

Posté : 30 mai 2014, 18:55
par the_grinch
Bonjour,
C'est encore moi... j'utilise apache Thrift pour sérialiser des données pour les stocker.
Thrift va générer des classes automatiquement en fonction d'une structure qu'on a défini.
class monobjet {
  static $_TSPEC;

  public $iso = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'iso',
          'type' => TType::STRING,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['iso'])) {
        $this->iso = $vals['iso'];
      }
    }
  }
J'oublie les méthodes.. (qui ne servent qu'à la sérialisation)

Je peux donc attribuer une valeur:
$objetcree = new monobjet();
$objetcree->iso = "nimporte quoi en string";
(Thrift va vérifier le type de la donnée.

Mais mon problème c'est qu'il m'est aussi possible de faire :
$objetcree->nimportequoi = "blabla";
Alors que je n'ai à aucun moment défini "nimportequoi" dans la classe ...
Pourquoi est ce que rien ne bloque ?

Il y a quelque chose que je n'arrive pas à comprendre...

Pouvez-vous m'éclairer ?

Merci !

Re: Création d'un attribut non défini d'un objet ?! L'empech

Posté : 31 mai 2014, 00:43
par moogli
Salut,

Regarde du côté de la surcharge d'objet : http://fr2.php.net/manual/fr/language.o ... oading.php.

Ton framework semble te poser pas mal de soucis.
Je n'en vois pas trop l'intérêt mais bon c'est un choix technique.


@+

Re: Création d'un attribut non défini d'un objet ?! L'empech

Posté : 31 mai 2014, 14:03
par the_grinch
L'avantage de thrift est qu'il fait parti du framework Hadoop (big data).
Il permet de sérialiser en binaire tout en réduisant la taille, en typant et en validant la structure. (même si je rajoute un attribut non défini ou si je mets un string alors qu'il attend un entier, il donnera une erreur et ne sérialisera pas)
Il permet aussi de faire du RPC (échange de données cross-language, par exemple : client php et serveur java)

Si tu as un peu de temps et que t'as envie de comprendre: http://blog.octo.com/serialisation-thri ... l-buffers/

En fait, c'est la première fois que je me pose la question de sérialiser quelque chose... (je suis en stage)

Il ne me pose pas tant de souci que ça mais ce n'est que pour ma culture personnelle.
Je ne trouve pas normal d'ajouter un attribut à un objet alors qu'il n'a pas été défini.. ça va au delà de ma définition de l'orienté objet.

Merci pour le lien, je comprends déjà un peu mieux !

Le php ne sera pas le langage de production ( bien entendu.. ), je voulais juste me mettre à jour.

Re: Création d'un attribut non défini d'un objet ?! L'empech

Posté : 31 mai 2014, 14:41
par xTG
En fait c'est parce que PHP permet la définition dynamique. ;)

Re: Création d'un attribut non défini d'un objet ?! L'empech

Posté : 01 juin 2014, 02:12
par moogli
PHP est un langage utilisable pour des plateformes de prod.
C'est un langage très "permissif" et il faut bien prévoira chose ;)
Du coup y a moyen de faire ce que l'on veux mais y a un peu de boulot.

La serialisation d'objet étant natif je ne pose pas trop ce type de problème.
Sinon en "cross langage" c'est du service web (rest / soap ou json).


@+

Re: Création d'un attribut non défini d'un objet ?! L'empech

Posté : 01 juin 2014, 15:16
par the_grinch
Ah bon? la sérialisation et compression d'objet en binaire est native ?
Je sais que le php aurait pu être le langage de prod mais ça ne sera pas le cas. (logiciel codé en delphi&ruby)

Bref merci encore ;)