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?

È stato utile?

Soluzione

Purtroppo, questo non è possibile ho paura per un oggetto passato al is_null restituire true. Alcuni alternativa potrebbe essere quella di:

  1. Utilizzare NullObjects, una interessante discussione su questi possono essere trovati di recente su SitePoint http://www.sitepoint.com/forums/showthread.php?t= 630292

  2. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top