passage par référence et par copie en PHP
En réponse à :
Citation:
Le problème est que je ne veux pas copier l'objet parent
Justement ! En PHP5 le passage des Object(class) ce fait par référence et non plus par copie comme en PHP4. Ainsi, en PHP5, dans le code ci-dessous, la variable $foo contient la référence(aussi appelé pointeur ou alias) vers l'espace mémoire alloué pour cette object -l'instance- :
Code:
$foo = new MaClass();
Exemple :
Soit la class Foo :
Code:
1 2 3 4 5
| class Foo
{
public $property;
function Foo() { $this->property = 'undefined'; }
} |
Voici une utilisation de class en php 4 (passage par copie par défaut)
Code:
1 2 3 4 5 6
| $foo = new Foo();
$foo_tmp = $foo;// passage par copie : on duplique l'object en mémoire
$foo_tmp->property = 'value';
echo $foo->property;// output : undefined
echo $foo_tmp->property;// output : value |
Voici une utilisation de class en php 5 (passage par référence par défaut)
Code:
1 2 3 4 5 6
| $foo = new Foo();
$foo_tmp = $foo;// passage par référence : on pointe la même adresse mémoire
$foo_tmp->property = 'value';
echo $foo->property;// output : value
echo $foo_tmp->property;// output : value |
Passage par référence en PHP 4 :
Code:
1 2 3 4 5 6
| $foo = new Foo();
$foo_tmp = & $foo;// passage par référence : on créer un alias de la variable $foo
$foo_tmp->property = 'value';
echo $foo->property;// output : value
echo $foo_tmp->property;// output : value |
Passage par copie en PHP 5 :
Code:
1 2 3 4 5 6
| $foo = new Foo();
$foo_tmp = clone $foo;// passage par copie : new instancie, et clone duplique
$foo_tmp->property = 'value';
echo $foo->property;// output : undefined
echo $foo_tmp->property;// output : value |
En ce qui concerne les autre classes(Serveur, Canal, Utilisateur), j'en pense que du bien^^