In un programma PHP ho una matrice di alcuni oggetti personalizzati, e voglio scoprire se l'array contiene un certo oggetto. Certo che posso usare array_search, ma questo controlla se gli oggetti sono lo stesso oggetto, non se ha le stesse variabili. Quindi voglio essere in grado di creare la mia funzione di confronto per gli oggetti, che posso usare con il metodo array_search (o qualcosa di simile). Voglio essere in grado di fare qualcosa del genere:overload php equals-operator
class foo
{
public $_a,$_b;
function __construct($a,$b)
{
$this->_a = $a;
$this->_b = $b;
}
function __equals($object)
{
return $this->_a == $object->_a;
}
}
$f1 = new foo(5,4);
$f2 = new foo(4,6);
$f3 = new foo(4,5);
$array = array($f1,$f2);
$idx = array_search($f3,$array); // return 0
è qualcosa di simile possibile? So che posso anche creare il mio metodo array_search che utilizza un metodo dalla classe, ma dovrei usare 2 diverse funzioni di ricerca, una per le classi che hanno la loro funzione di confronto e una per quelle che hanno 't.
array_search controlla solo se gli oggetti sono la stessa istanza se si imposta il suo terzo parametro $ strict su true. Altrimenti, due oggetti sono considerati uguali se "hanno gli stessi attributi e valori e sono istanze della stessa classe" - vedi il comportamento di [==] (http://php.net/manual/en/language. oop5.object-comparison.php) dell'operatore. – yscik