wiki:CopixDataObject

Présentation

CopixDataObject permet de manipuler des objets contenant des données dans leurs propriétés publiques.

C'est une classe de base destinée à être étendue. Les sous-classes doivent définir des propriétés publiques à manipuler.

Seules les propriétés publiques sont prises en compte par CopixDataObject. Si des propriétés privées ou protégées sont définies, elles sont ignorées par les méthodes de CopixDataObject, y compris pour la sérialisation.

Méthodes

Constructeur

CopixDataObject(mixed $pValues = null)

Si $pValues est un tableau, $this->loadFromArray($pValues) est appelé.

CopixDataObject::loadFromArray()

CopixDataObject CopixDataObject::loadFromArray(array $pValues)

Charge les propriétés publiques de l'instance à partir d'un tableau associatif (nom=>valeur). Les entrées dont le nom ne correspond pas à une propriété publique sont ignorées.Les propriétés absentes du tableau sont supprimées de l'instance.

Retourne l'objet.

CopixDataObject::writeToArray()

CopixDataObject CopixDataObject::writeToArray(array &$pArray)

Ecrit les propriétés publiques de l'instance dans le tableau $pArray. Si une propriété n'est pas définie, son équivalent dans le tableau est supprimé.

Retourne l'objet.

CopixDataObject::toArray()

array CopixDataObject::toArray()

Retourne un tableau contenant les propriétés publiques de l'instance.

Exemples

Pour les exemples nous utiliserons la classe imaginaire suivante :

<?php
class MaClasse extends CopixDataObject {

  public $a = "aOriginal";

  public $b;

  protected $_c = "_cOriginal";
  
  public function setC($pC) {
        $this->_c = $pC;
  }

}

Instanciation

<?php
$instance = new MaClasse();
$instance->setC("nouveau_C");
var_dump($instance);
?>

Résultat:

object(MaClasse)[2]
  public 'a' => string 'aOriginal' (length=9)
  public 'b' => null
  protected '_c' => string 'nouveau_C' (length=10)

Chargement depuis un tableau

<?php
$instance = new MaClasse();
$instance->setC("nouveau_C");
$instance->loadFromArray(array("b"=>5,"_c"=>"_cDuTableau"));
?>

Résultat:

object(MaClasse)[2]
  public 'b' => int 5
  protected '_c' => string 'nouveau_C' (length=9)

A remarquer:

  • _c n'a pas été modifié : c'est une propriété protégée,
  • a a été supprimé : il n'y a pas d'élément a dans le tableau.

Ecriture dans un tableau

<?php
$instance = new MaClasse();
$instance->loadFromArray(array("b"=>5));
$array = array("z"=>"zDuTableau", "a"=>8, "_c"=>"_cDuTableau");
$instance->writeToArray($array);
var_dump($array);
?>

Résulat:

array
  'z' => string 'zDuTableau' (length=10)
  '_c' => string '_cDuTableau' (length=11)
  'b' => int 5

A remarquer:

  • a a été supprimé du tableau : la propriété a n'est pas définie dans l'instance,
  • z et _c n'ont pas été modifiés : ce ne sont pas des propriétés publiques de la classe.

Conversion en tableau

<?php
$instance = new MaClasse();
var_dump($instance->toArray());
?>

Résulat:

array
  'a' => string 'aOriginal' (length=9)

Sérialisation et désérialisation

<?php
$instance = new MaClasse();
$instance->loadFromArray(array("b"=>5));
var_dump(unserialize(serialize($instance)));
?>

Résultat :

object(MaClasse)[6]
  public 'b' => int 5
  protected '_c' => string '_cOriginal' (length=10)

A remarquer:

  • les propriétés a et b sont dans le même état avant et après,
  • la propriété _c est fixée à sa valeur par défaut : étant protégée, elle n'a pas été sérialisée.