Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

PHP : Quelques rappels pour la POO 2/2

Article posté le 30-12-2013 dans la catégorie PHP

Attention, le contenu cet article est peut-être obsolète!

Voici encore quelques astuces pour l'utilisation de la poo avec PHP. Il s'agit de l'utilisation de fonctions avancées, mais essentielles à connaître.

1- Cloner un objet

Pour copier une instance de classe, l'utilisation de l'opérateur "=" n'est pas adaptée. En effet, la variable ne contient pas l'objet mais juste un identifiant vers celui-ci. Ainsi, si vous utilisez "=", vous ne ferez que créer un nouvel identifiant pointant vers la même instance.

$a = new toutou();
$b = $a; // Pointent vers la même instance

Pour cloner une instance, vous devez donc utiliser la méthode 'clone' :

$b= clone $a; // Vous aurez bien deux objets distincts.

Notez qu'à l'image de la fonction pour compter les instances de chaque classe, vous pouvez modifier la fonction "clone" :

  public function __clone()
  {
    self::$instances++;
  }
  public static function getInstances()
  {
    return self::$instances;
  }

2- Comparer des objets

Comparer deux objets se fait comme une comparaison simple de variable, avec l'opérateur "==". Cependant vous devez savoir que pour que la condition renvoie true, il faut queles deux objets comparés aient non seulement les mêmes attributs avec les mêmes valeurs, mais aussi que les deux objets comparés soient des instances de la même classe!

3- Parcourir des objets

Pour parcourir simplement un objet, vous pouvez utiliser 'foreach". Il existe deux méthodes :

Exemples issus de la documentation PHP :

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) { //A chaque boucle il passe à la case suivante
    echo $value; // Affiche le contenu de la case actuelle
}

Dans le cas d'un objet plutôt que d'un tableau, ce sera bien les valeurs des attributs qui seront affichés.

Mais celui-ci est le plus intéressant :

foreach ($objet as $name=> $value) //A chaque passage, on passe à l'instance suivante
{
//$name aura pour valeur le nom de l'attribut actuellement lu et $value sera sa valeur
}

Cet article vous a plu? Découvrez d'autres articles


Tweet
comments powered by Disqus