Home
Accueil
Downloads
Téléchargements
Forums
Forums
Your Account
Votre compte
Menu
· Accueil ·

· Communication ·
  · Forums
  · Messages privés
  · Contactez nous
  · Recommendez nous
  · Sondages
  · Les projets

· Nouvelles ·Stats
  · Sujets
  · Ecrire un article
  · Articles archivés
  · Articles RSS
  · Lettre de sécurité
  · Archive de lettres

· Téléchargements ·
  · Accueil
  · Nouveautés
  · Mises à jour
  · Thêmes

· Outils ·
  · Outils divers
  · Convertisseur de temps
  · Table de caractères
  · Générateur de boutons
  · Compresseur Javascript

· Documentation ·
  · Wiki
  · Questions/Réponses
  · Documents
  · Manuel PHP-Nuke
  · Manuel PHP
  · Manuel PEAR
  · Encyclopédies

· Liens ·
  · Nos liens
  · Nos fluxs RSS
  · Partenaires
  · Votre publicité
  · Sitemap
  · Mes bannières

· Infos ·
  · Rechercher
  · Votre compte
  · Liste des membres
  · Carte des membres
  · Top

· Divers ·
  · Météo
  · Galeries
  · Statistiques Phpnuke
  · MS Analysis


Clonage d'objets

Clonage 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 que le nouvel objet contienne 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

$copie_d_objet = clone $objet;

?>

Lorsqu'un objet est cloné, PHP 5 effectue une copie superficielle 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, la méthode __clone() du nouvel objet sera appelée pour permettre à chaque propriété qui doit l'être d'être modifiée.

Exemple 19-31. 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 $objet1;
  
public $objet2;

  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);

?>

L'exemple ci-dessus va afficher :

Object original :
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Object cloné :
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
       )

)

Manuel PHP pour PHP-Nuke © www.stefvar.com
Syndiquez notre contenu RSS, Atom, etc..
PHP-Nuke © 2007Reproduction interdite sans autorisation de ma part www.stefvar.com Copyright © 2008Thème iCGstation
Site français de la communauté PragmaMx