Mot clé "final"
<<<
Duplication d'objets Comparaison d'objets
>>>

5.10 Les classes et les objets (PHP 5)
5 Référence du langage
 Manuel PHP

Introduction
Les notions de base
Auto-chargement de classes
Constructeurs et destructeurs
Visibilité
L'opérateur de résolution de portée (::)
Statique
Constantes
Abstraction d'objets
Interfaces
Surcharge
Les Itération
Masques
Méthodes magiques
Mot clé "final"
->Duplication d'objets
Comparaison d'objets
Réflexion
Typage optionnel des paramètres

5.10.16 Duplication d'objets

Le fait de créer une copie d'un objet possédant exactement les mêmes propriétés n'est pas toujours le comportement que l'on souhaite. Un bon exemple pour illustrer le besoin d'un constructeur de copie : Si vous avez un objet qui représente une fenêtre GTK et que l'objet contient la ressource représentant cette fenêtre GTK, lorsque vous créez une copie, vous pouvez vouloir créer une nouvelle fenêtre avec les mêmes propriétés, mais le nouvel objet devra contenir une ressource représentant la nouvelle fenêtre.

Un autre exemple : Si votre objet $a contient une référence vers un autre objet $b qui est en cours d'utilisation, lorsque vous copiez l'objet parent ( $a ), vous voulez créer une nouvelle instance de $b pour que votre copie possède sa propre instance.

Une copie d'objet est créée en utilisant le mot clé clone (qui fait appel à la méthode __clone de l'objet, si elle a été définie). La méthode __clone d'un objet ne peut être appelée directement.


<?php

$copy_of_object
= clone $object;

?>

Lorsqu'un objet est cloné, PHP 5 effectura une copie peu profonde de toutes les propriétés de l'objet. Toutes les propriétés qui sont des références à d'autres variables, demeureront des références. Si une méthode __clone() est définie, alors le nouvel objet créé par la méthode __clone() sera appelé pour permettre à chaques propriétés qui doivent l'être, d'être changés.

Exemple de duplication d'objets

<?php
class SubObject
{
  static
$instances = 0;
  
public $instance;

  
public function __construct() {
    
$this->instance = ++self::$instances;
  }

  
public function __clone() {
    
$this->instance = ++self::$instances;
  }
}

class
MyCloneable
{
  
public $object1;
  
public $object2;

  function
__clone()
  {    
    
// Force la copie de this->object, sinon
    // il pointera vers le même objet.
    
$this->object1 = clone($this->object1);
  }
}

$obj = new MyCloneable();

$obj->object1 = new SubObject();
$obj->object2 = new SubObject();

$obj2 = clone $obj;


print(
"Objet original :\n");
print_r($obj);

print(
"Objet cloné :\n");
print_r($obj2);

?>

<< Duplication d'objets >>
Mot clé "final" Les classes et les objets (PHP 5) Comparaison d'objets