passage d'argument objet aux méthodes
Bonjour,
je viens d'attaquer une 2e lecture du bouquin de Bersini sur la POO...et je me suis arrêté sur un exemple de code PHP qui me surprend un peu...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <html>
<head>
<title>test</title>
</head>
<body>
<?php
class O3 {
private $c;
public function __construct($initC){
$this->c = $initC;
}
public function incrementeC(){
$this->c++;
}
public function afficheC(){
print("C=$this->c<br/>");
}
}
class O2 {
public function jeTravaillePourO2(O3 $lienO3){
$lienO3->incrementeC();
$lienO3->afficheC();
}
public function jeCreeUnObjet03(O3 &$lienO3) { /* avec ou sans le & */
$lienO3 = new O3(7);
$lienO3->incrementeC();
$lienO3->afficheC();
}
}
$unO3 = new O3(6);
$unO2 = new O2();
$unO2->jeTravaillePourO2($unO3);
$unO3->afficheC();
$unO2->jeCreeUnObjet03($unO3);
$unO3->afficheC();
?>
</body>
</html> |
donc dans ce code, la classe O2 comporte 2 méthodes :
- jeTravaillePourO2 à qui on passe une objet instance de la classe O3
- jeCreeUnObjet03 à qui on passe en argument le même objet.
D'après ce que j'ai compris, les objets sont automatiquement passés par référence, donc c'est le cas pour les 2 méthodes.
Cela explique l'affichage obtenu :
Citation:
C=7
C=7
C=8
C=8
Mais de ce fait, le new de la ligne 31 provoque la création d'un nouvel objet instance de la classe O3, mais il ne sert pas à grand chose, vu que si on l'enlève, on obtient le même affichage (essai effectué). Qu'en pensez-vous ?