Lecture de la partie du livre GoF sur le modèle Observer ? Voici une solution qui éliminera le besoin de faire une recherche coûteuse pour trouver l'indice de l'objet que vous souhaitez supprimer.
public function addObserver(string $aspect, string $viewIndex, Observer $view)
{
$this->observers[$aspect][$viewIndex] = $view;
}
public function removeObserver(string $aspect, string $viewIndex)
{
if (!isset($this->observers[$aspect])) {
throw new OutOfBoundsException("Aucun aspect tel que ({$aspect}) n'existe dans ce modèle : " . __CLASS__);
}
if (!isset($this->observers[$aspect][$viewIndex])) {
throw new OutOfBoundsException("Aucune vue pour ({$viewIndex}) n'a été ajoutée à l'aspect ({$aspect}) de ce modèle : " . __CLASS__);
}
unset($this->observers[$aspect][$viewIndex]);
}
Vous pouvez supprimer la dimension "aspect" si vous n'utilisez pas cette méthode pour suivre quelles Vues
sont mises à jour par des Modèles
spécifiques.
public function addObserver(string $viewIndex, Observer $view)
{
$this->observers[$viewIndex] = $view;
}
public function removeObserver(string $viewIndex)
{
if (!isset($this->observers[$viewIndex])) {
throw new OutOfBoundsException("Aucune vue pour ({$viewIndex}) n'a été ajoutée à ce modèle : " . __CLASS__);
}
unset($this->observers[$viewIndex]);
}
Résumé
Construisez un moyen de trouver l'élément avant d'assigner l'objet au tableau. Sinon, vous devrez découvrir d'abord l'indice de l'élément objet.
Si vous avez un grand nombre d'éléments objets (ou même plus qu'une poignée), alors vous devrez probablement trouver l'indice de l'objet en premier. La fonction PHP array_search()
est une manière de commencer avec une valeur et obtenir en retour l'indice/clé.
https://www.php.net/manual/en/function.array-search.php
N'oubliez pas d'utiliser l'argument strict
lorsque vous appelez la fonction.
Si le troisième paramètre strict est défini sur true
, alors la fonction array_search() recherchera des éléments identiques dans la pile. Cela signifie qu'elle effectuera également une comparaison de type stricte de l'aiguille dans la pile, et les objets doivent être la même instance.