English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Toutes les catégories

Voici l'extrait de code d'ailleurs largement repris par plusieurs sites à la virgule près.j'ai besoin de vraiment comprendre au lieu de répéter comme un perroquet
[début extrait]
Un objet instancié n'est pas une
référence (un pointeur) mais une
variable, sorte de ''tableau associatif
muni de méthodes''. On peut s'en
rendre compte sur une copie d'objet :
$auto= new Véhicule( 4 );
$moto= $auto;
$moto-> nb_roues= 2;
echo $auto-> nb_roues;
// 2 et non 4 => $auto et $moto sont
deux objets distincts.
[fin extrait]
personnellement, je pense que le résultat de l'ECHO doit être 4 et non 2 car...
... l'objet $moto n'a reçu qu'une copie de $auto (une valeur de $auto) et non la référence de $auto (passage de paramètre par valeur). donc un changement sur $moto ne devrais pas influer sur $auto (dont le nombre de roue reste 4). corrigez-moi si je me trompe.

2006-12-24 08:18:15 · 4 réponses · demandé par diamana 1 dans Informatique et internet Programmation

4 réponses

Salut !!

Comme l'ont dit nos deux amis au dessus, le code est orrect car il s'agit du m^me objet.
Tu instancies un objet auto que que tu renommes ensuite moto.

Si tu affectes une variable de CLASSE sur l'objet moto (ou auto), cette variable aura la même valeur pour auto et moto.

Il faut donc instancier à chaque fois un nouvel objet pour lui attribuer des paramètres différents.
par exemple $auto->nb_roues = 4;
$moto = new Vehicule();
$moto->nb_roues= 2;

Voilà bon courage dans les objets !!!!!

2006-12-25 06:43:29 · answer #1 · answered by FifPower 4 · 0 0

$moto = $auto;

ne crée pas une copie de $auto mais il s'agit du même objet sous un autre nom.

En Php 5 pour avoir une copie de $auto tu devra écrire.

$moto = clone $auto.

2006-12-24 18:56:22 · answer #2 · answered by hammadi 3 · 0 0

$auto et $moto sont ici les mêmes objets.

2006-12-24 16:22:06 · answer #3 · answered by Clebs 3 · 0 0

Je ne connais pas la poo en php mais effectivement ce code me semble étrange... car il est bien indiqué que "un objet instancié n'est pas une référence", hors si ce n'est pas une référence lorsque l'on fait le $moto=$auto l'objet $moto ne pointe pas vers la meme chose que $auto mais c'est une copie des valeurs donc de la totalité de l'objet.

Si l'on change donc le nb_roues de $moto il ne doit donc en aucun cas changer dans $auto... car les deux objet sont bien distincts...il y a donc soit une erreur dans le code, soit une erreur dans le commentaire de départ.

2006-12-24 16:40:51 · answer #4 · answered by kdfr 3 · 0 1

fedest.com, questions and answers