PHP4.3.10 :

CMatt Messages postés 38 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 15 octobre 2010 - 7 avril 2006 à 11:32
CMatt Messages postés 38 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 15 octobre 2010 - 7 avril 2006 à 14:19
Bonjour à tous,
je rencontre quelques difficultés à faire de la POO avec PHP4.
Voici mon objet :
// Implémente une planète
class Planete
{
// Contient le nom
var $Nom;
// Contient l'alliance
var $Alliance;
// Contient le joueur
var $Joueur;
// Contient le numéro
var $Numero;
// Contient le type
var $Type;
// Contient le système
var $Systeme;

// Initialise une nouvelle planète
// $pXml : noeud Xml sous-jacent (optionnel)
function Planete( $pXml = null )
{
// Si le système est valide
if( $pXml!=null && is_a( $pXml, "XmlElement" ) && $pXml->Nom=="planete" )
{
// Configure la planète
$this->Nom = $pXml->Valeur;
$this->Alliance = $pXml->Attributs["alliance"]->Valeur;
$this->Joueur = $pXml->Attributs["joueur"]->Valeur;
$this->Numero = (int) ($pXml->Attributs["numero"]->Valeur);
$this->Type = $pXml->Attributs["type"]->Valeur;
$this->Systeme = null;
}//if
// Sinon
else
{
// Initialise la planète
$this->Nom = "";
$this->Alliance = "";
$this->Joueur = "";
$this->Numero = 0;
$this->Type = "n";
$this->Systeme = null;
}//else
}//constructeur

}//classe planete

Et voici un petit bout de code qui donne des résultats inattendus :
// Initialise de nouvelles planètes
$pPlanete1 = new Planete();
$pPlanete2 = new Planete();

print( "Instances planètes : contenus ".($pPlanete1==$pPlanete2 ? "identiques" : "différents")." et références ".($pPlanete1===$pPlanete2 ? "identiques" : "différentes").".
\r\n" );

et le résultat est :

Instances planètes : contenus identiques et références identiques.

Le contenu des deux instances est strictement le même.
Dans la doc PHP, il est indiqué que l'opérateur "===" compare les références et non les contenus des objets. Or j'ai bien là 2 références distinctes il me semble, non?
Ou alors existe-t-il une autre méthode de comparer des références à des objets?

Toute aide sera la bienvenue.

@++

5 réponses

CMatt Messages postés 38 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 15 octobre 2010
7 avril 2006 à 11:46
Juste une petite correction à ce que j'ai dit précédement : l'opérateur "===" compare le contenu et le type, et non pas des références.
Mon problème se résume donc à une solution qui me permettera de comparer des références.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
7 avril 2006 à 12:14
Bah :
$pPlanete1 = $pPlanete2 ... normal, vu que toutes tes propriétés valent la même chose de chaque coté !
0
CMatt Messages postés 38 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 15 octobre 2010
7 avril 2006 à 12:17
Outre la valeur des propriétés, ce qui m'intéresse, c'est de savoir si j'ai à faire à une seule et même instance (un même objet en mémoire) comme la méthode statique bool Object.Equals( object obj ) en C#..
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 avril 2006 à 14:06
Hello,

je ne pense pas que tu puisses déterminer ça en php 4.

En php5, :

<?php
class a {
var $test='test';
function a () {
}
}
$a = new a;
$b = & $a;
$c = new a;


echo intval (($a === $c)); // affiche 0


echo intval (($a === $b)); affiche 1
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CMatt Messages postés 38 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 15 octobre 2010
7 avril 2006 à 14:19
Merci, après quelques recherches, il me semble aussi que PHP4 est plutôt limite pour tout ce qui est POO.
En effet, je suis tombé sur un site où il était dit que l'opérateur "===" comparait le contenu et le type seulement en PHP4, alors que en PHP5, il compare les références, du moins pour les objets il me semble.

@++
0
Rejoignez-nous