[RESOLU] Utilisation d'un getter et setter.

Eléphant du PHP | 419 Messages

27 mai 2014, 10:27

Salut tout le monde.
C'est encore moi..

Alors je suis en train de vouloir utiliser Thrift pour sérialiser un fichier xml.
J'ai bien défini la structure mais je n'arrive pas utiliser les getters/setters. (Thrift génère un code php qui va gérer les objets Thrift)

Voici une partie du code :
class Creation {
  static $_TSPEC;

  public $a_iso = null;
  public $date = null;

		  public function __construct($vals=null) {
			if (!isset(self::$_TSPEC)) {
			  self::$_TSPEC = array(
				1 => array(
				  'var' => 'a_iso',
				  'type' => TType::I32,
				  ),
				2 => array(
				  'var' => 'date',
				  'type' => TType::I32,
				  ),
				);
			}
			if (is_array($vals)) {
			  if (isset($vals['a_iso'])) {
				$this->a_iso = $vals['a_iso'];
			  }
			  if (isset($vals['date'])) {
				$this->date = $vals['date'];
			  }
			}
		  }

		  public function read($input)
		  {
			$xfer = 0;
			$fname = null;
			$ftype = 0;
			$fid = 0;
			$xfer += $input->readStructBegin($fname);
			while (true)
			{
			  $xfer += $input->readFieldBegin($fname, $ftype, $fid);
			  if ($ftype == TType::STOP) {
				break;
			  }
			  switch ($fid)
			  {
				case 1:
				  if ($ftype == TType::I32) {
					$xfer += $input->readI32($this->a_iso);
				  } else {
					$xfer += $input->skip($ftype);
				  }
				  break;
				case 2:
				  if ($ftype == TType::I32) {
					$xfer += $input->readI32($this->date);
				  } else {
					$xfer += $input->skip($ftype);
				  }
				  break;
				default:
				  $xfer += $input->skip($ftype);
				  break;
			  }
			  $xfer += $input->readFieldEnd();
			}
			$xfer += $input->readStructEnd();
			return $xfer;
		  }

		  public function write($output) {
			$xfer = 0;
			$xfer += $output->writeStructBegin('Creation');
			if ($this->a_iso !== null) {
			  $xfer += $output->writeFieldBegin('a_iso', TType::I32, 1);
			  $xfer += $output->writeI32($this->a_iso);
			  $xfer += $output->writeFieldEnd();
			}
			if ($this->date !== null) {
			  $xfer += $output->writeFieldBegin('date', TType::I32, 2);
			  $xfer += $output->writeI32($this->date);
			  $xfer += $output->writeFieldEnd();
			}
			$xfer += $output->writeFieldStop();
			$xfer += $output->writeStructEnd();
			return $xfer;
		  }
}
Voici la structure Thrift :

Code : Tout sélectionner

struct Creation { 1: int a_iso, 2: int date }
Il y a une fonction read($input) et une autre write($output).
Pouvez-vous m'aider à les utiliser ?

J'ai fait:
$objetcree = new Creation();
$objetcree->a_iso = 45;
ça marche car a_iso est en public mais je ne veux pas faire comme ça...
$objetcree->sdfqsdfsdf= 27052014;
fonctionne aussi, mais pour quelle raison ?! car "sdfqsdfsdf" n'est pas définie.

Je sais que je peux utiliser
$objetcree->read($input);
mais que mettre dans $input si je veux modifier uniquement a_iso ?

// Je continue de chercher et de tester des choses de mon coté..

Je vous remercie.

edit: et que signifie le "+=" ($xfer += $output->writeFieldEnd();) ?
Aucun site en création...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 mai 2014, 13:32

Salut,

+= est ce que l'on appel un "sucre syntaxique". C'est un raccourcis de code comme .=
La foe classique de $var += 12( est $var = $var +12;

Pour l'objet sûrement parce que c'est une stdclass ?
Que te dit la doc la dessus ?

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 419 Messages

27 mai 2014, 15:01

Ah d'accord, merci !!

Je n'ai aucune documentation... ( ils sont pas fan des docs chez apache thrift... et encore moins pour la partie php )
En fait apparemment il n'est pas possible d'utiliser ces getters et setters directement... Ce n'est valable que lorsqu'on veut utiliser un protocol...
Aucun site en création...