è possibile ottenere un ritorno di classe vero in is_null?
Domanda
Sto costruendo una sorta di una classe proxy pattern per lazyloading query SQL.
Il pattern proxy utilizza __call
, __get
e __set
per la trasmissione chiede che dell'oggetto, ma a volte non c'è oggetto, se l'SQL non ha restituito alcuna riga.
La mia domanda è, allora, se faccio un is_null()
sulla classe proxy, è possibile rendere il ritorno true
di classe, allora? Sto pensando v'è alcuna interfaccia SPL posso implementare come numerabile che rende il lavoro di classe in count()
.
Qualche suggerimento?
Soluzione
Purtroppo, questo non è possibile ho paura per un oggetto passato al is_null restituire true. Alcuni alternativa potrebbe essere quella di:
-
Utilizzare NullObjects, una interessante discussione su questi possono essere trovati di recente su SitePoint http://www.sitepoint.com/forums/showthread.php?t= 630292
-
In realtà tornare nullo piuttosto che un oggetto, anche se questo potrebbe non essere possibile nella vostra situazione.
Altri suggerimenti
Non so se questo è di alcun aiuto, ma sfruttando il metodo __toString si potrebbe possibile ottenere quello che stai cercando, ma attenzione, questo non è affatto il codice tutto pulito o buone pratiche, la soluzione Rob suggerito è effettivamente migliore
Hai a utilizzare PHP5.2 o superiore e sfruttare typecasting e __toString metodo magico del modello di classe di PHP
class Dummy
{
private $value;
public function __construct($val)
{
$this->value = $val;
}
public function __toString()
{
return $this->value;
}
}
$dummy = new Dummy('1');
if((string)$dummy) {
echo "__toString evaluated as true".PHP_EOL;
} else {
echo "__toString evaluated as false".PHP_EOL;
}
$dummy2 = new Dummy('0');
if((string)$dummy2) {
echo "__toString evaluated as true".PHP_EOL;
} else {
echo "__toString evaluated as false".PHP_EOL;
}
Quello che succede qui è il metodo __toString restituisce la stringa o la stringa 0 1 (attenzione, non tornare interi, restituiscono stringhe!)
'0' FALSE, '1' viene valutato come vero in if quindi potrebbe essere di aiuto nel vostro caso anche.