Hello
Je fait une classe pour une web-app, j'ai donc plusieurs méthodes notamment une exist($anObject) qui test si l'objet passé en paramètre existe dans la collection ou non.
C'est typiquement le rôle d'un collection SplObjectStorage.
J'ai une autre méthode getIndexOfObject($anObject) dans laquelle je souhaite tester l'existence de l'objet dans la collection avant de le chercher dedans.
Pour cela j'appel donc ma méthode exist($anObject).
Tu devrais plutôt implémenter ArrayAccess et fournir à ton hashmap __isset et __unset 
En d'autres termes, tu devrais te tourner vers l'extension des classes SPL existantes plutôt que de redéfinir ArrayObject ou SplObjectStorage.
Tu as également un problème de conception: la méthode "exist" fait intervenir un array_key_exists en demandant l'id de l'instance qu'il reçoit en paramètre, ce qui induit un couplage fort entre ton hashmap et ses éléments. Si c'est effectivement ce qu'on veut, il serait de bon ton de spécifier quel type d'objet exists peut recevoir en paramètre, ce qui peut se faire de cette façon:
1 2 3
|
...
public function exist (MaClasse $object) { ... |
La fonction checkclass peut également être remplacée par is_a: http://php.net/manual/en/function.is-a.php
D'ailleurs tu peux aussi bien remplacer:
1 2 3 4 5 6 7 8 9
|
if(array_key_exists($anObject->id, $this->collection)) // Vérification de la présence de l'objet ds la collection
{
$exist = 1;
}
else
{
$exist = 0;
} |
par
return array_key_exists($anObject->id, $this->collection);
Partager