JeuWeb - Crée ton jeu par navigateur
[PHP] Comparaison de deux objets - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Comparaison de deux objets (/showthread.php?tid=3435)

Pages : 1 2


[PHP] Comparaison de deux objets - Argorate - 15-12-2008

Bonsoir,

Je suis entrain de finir de créer ma class collection en PHP, le seul truc qu'il me manque c'est ma méthode "existe()", qui détermine si un objet est déjà présent dans la collection ou non.

Je ne peux pas faire un if(UnObjet == AutreObjet)

Donc je voulais savoir comment on peut s'y prendre?

Merci.


RE: Comparaison de deux objets en php? - Nambew - 15-12-2008

Si tu regardes dans l'API de Java, ça peut te donner une idée. Tu peux définir une méthode de comparaison.

Citation :contains

public boolean contains(Object o)

Returns true if this collection contains the specified element. More formally, returns true if and only if this collection contains at least one element e such that (o==null ? e==null : o.equals(e)).

This implementation iterates over the elements in the collection, checking each element in turn for equality with the specified element.

Specified by:
contains in interface Collection<E>

Parameters:
o - object to be checked for containment in this collection.
Returns:
true if this collection contains the specified element.



RE: Comparaison de deux objets en php? - Argorate - 15-12-2008

Oui alors là^^ Soit tu me l'as fait en français soit je ne comprend rien Smile
Et tu penses qu'il existe un équivalant en php, ou tu sais qu'il existe un équivalant en php?


RE: Comparaison de deux objets en php? - Nambew - 15-12-2008

Tu dois coder toi même ta méthode equal. Voici un exemple en Actionscript, mais c'est la même chose en PHP.

Code PHP :
<?php 
package
{
public class
CollectionItem
{
private var
_name:String;
private var
_value:Number;

public function
CollectionItem( name:String, value:Number )
{
_name = name;
_value = value;
}

public function
getName():String
{
return
_name;
}

public function
getValue():Number
{
return
_value;
}

public function
equal( o:CollectionItem ):Boolean
{
return (
o != null && this.getName() == o.getName() && this.getValue() == o.getValue() );
}
}
}

Code PHP :
<?php 
package
{
public class
Collection
{
private var
_list:Array;

public function
Collection()
{
_list = new Array();
}

public function
add( o:CollectionItem ):void
{
_list.push( o );
}

public function
remove( o:CollectionItem ):void
{
var
index:int = _list.indexOf( o );

if(
index >= 0 )
{
_list.splice( index, 1 );
}
}

public function
contains( o:CollectionItem ):Boolean
{
for
each( var i:CollectionItem in _list )
{
if(
o.equal( i ) )
{
return
true;
}
}

return
false;
}

}
}

Code PHP :
<?php 
package
{
import flash.display.Sprite;

public class
sampleCollection extends Sprite
{

public function
sampleCollection()
{
var
collection:Collection = new Collection();

collection.add( new CollectionItem( "nom1", 99 ) );
collection.add( new CollectionItem( "nom2", 99 ) );
collection.add( new CollectionItem( "nom1", 100 ) );

trace( collection.contains( new CollectionItem( "nom1", 100 ) ) ); //true
trace( collection.contains( new CollectionItem( "nom4", 100 ) ) ); //false
}
}
}



RE: Comparaison de deux objets en php? - lemouix - 15-12-2008

Je n'ai pas tout compris, mais est ce que === ne résoudrait pas ton pb ? Il s'agit d'un test sur la nature des objets de droite et de gauche Smile


RE: Comparaison de deux objets en php? - Argorate - 16-12-2008

il me faut comparé deux objets, voir si tous les attribus sont identique & qu'il son de la meme classe...

Sinon, Nambew, j'aurais aimé trouver un moyen avec un simple if, et pas avoir a créé une seconde classes comme dans ton exemples.


RE: Comparaison de deux objets en php? - Zamentur - 16-12-2008

En php5
php manual a écrit :Lors de l'utilisation de l'opérateur de comparaison ==, les objets sont comparées de manière simple, à savoir : deux objets sont égaux s'ils ont les mêmes attributs et valeurs, et qu'ils sont des instances de la même classe
http://fr.php.net/manual/fr/language.oop5.object-comparison.php

et c'est === pour savoir si c'est le même objet (dans le sens même référence)


Et je crois que çà marche aussi en php4 pour le premier cas...

Ou alors j'ai peut etre rien compris?


RE: Comparaison de deux objets en php? - Holy - 16-12-2008

Argo, tu n'en dis pas assez ^^

On ne connait pas tous ta classe, ni la manière dont est structurée ta collection ^^

La meilleure solution, à mon avis, c'est de créer un champ "référence" automatiquement, qui compilerait divers éléments caractéristiques de ton objet dans une chaine de caractère, un peu comme les opérateurs de bits.

Genre:

Nom: Masse d'arme
Dégât: 5
Qualité: 10
Référence: masse:5:10

Comme ça si tu as un second objet:
Nom: Masse d'arme
Dégât: 10
Qualité: 5

Référence: masse:10:5

Suffit après de faire une comparaison après:
Code PHP :
<?php
if($Objet1['reference'] == $Objet2['reference']) {
// C'est la même arme, avec les mêmes caracs
}
else {
// Ce sont deux armes différentes
}

C'est qu'une idée, à toi d'adapter, je connais pas tes champs discriminants ^^'


RE: Comparaison de deux objets en php? - Wells - 16-12-2008

Tient un Argorate faisant de l'objet ? la fin du monde serait elle plus proche que prévue ^^

Sinon pour en revenir au sujet, je ne vois pas trop l'intérêt de faire une comparaison d'objet point à point. Logiquement si tu veux comparer deux armes, tu test leur ID. Ça suffit largement. Quel est la finalité de cette comparaison?


RE: Comparaison de deux objets en php? - Argorate - 16-12-2008

Wells : Je penssais que tu avais compris SmileSi je parle d'objet ça implique qu'il ne s'agit pas de mon jeu Smile

Zamentur : un simple == ne marche pas, du moins là où j'ai tester (c'était avec wamp, mais il faudra que je verifie la version de php).

holy: le principe d'une collection est le meme de partout, moi se que je fais c'est un simple tableau contenant des objets.
Pour ta solution, ce n'est pas applicable comme tu l'indiques.

C'est une simple recherche d'élément dans un tableau, le probleme ici étant que le tableau contient des objets:

Code PHP :
<?php 
//******************** Fonction EXISTE (renvoie true si l'objet existe deja, false sinon) *********************
public function existe($objet)
{
$i=1; $valide = 0;
while(
$i<$this->Cardinal AND $valide == 0)
{
if(
$this->tab[$i] == $objet) $valide = 1;
else
$i++;
}

return
$valide;
}