Nota: questo è un post tecnico!!
Nel tentativo di ottimizzare il numero di query per un nuovo progetto partito da poco, ho deciso di parametrizzare la clausola where di una query, valorizzando la corrispondente “in” tramite un array passato quale parametro di un generico metodo.
Come sappiamo, dall’introduzione di PHP 5.x sono stati introdotti i metodi __get e __set di modo da poter, rispettivamente, leggere o scrivere il valore di una proprietà definita all’interno di un oggetto.
Tuttavia, ciò che forse non sappiamo, è che dalla versione 5.2 il metodo __get restituisce copie, e non riferimenti. Per questo motivo, non sarebbe possibile scrivere una cosa del tipo:
$obj = new MyObject;
$obj->property1[‘param1’] = true;
Il sistema tornerà il seguente errore:
Notice: Indirect modification of overloaded property MyObject::$property1 has no effect.”
Per risolvere questo bug, è sufficiente modificare il metodo __get di modo che restituisca un riferimento.
public function &__get($key)
{
…
…
}
(via bugs.php.net)