La funzione che opera sull'oggetto deve restituirla?

0

La funzione che opera sull'oggetto dovrebbe restituirla?

Esempio abbreviato:

class Example1
{
    public function method($a, $b)
    {
        $result = new Result($a, $b);

        $this->multiplication($result, 2);

        return $result;
    }

    private function multiplication(Result $object, $value)
    {
        $object->multi($value);
    }
}

class Example2
{
    public function method($a, $b)
    {
        $result = new Result($a, $b);

        $result = $this->multiplication($result, 2);

        return $result;
    }

    private function multiplication(Result $object, $value)
    {
        return $object->multi($value);
    }
}

Entrambe le classi danno gli stessi risultati, ma quale stile dovrei usare?

Il secondo esempio è più chiaro, ma d'altra parte tutti dovrebbero sapere che gli oggetti sono passati attraverso il riferimento.

    
posta sihay 21.10.2018 - 15:14
fonte

1 risposta

3

Il metodo multiplication è nella classe sbagliata. Se un metodo non ha bisogno di $this , allora dovrebbe essere spostato in una classe di cui ha bisogno. I tuoi metodi method (entrambi) usano $this ma solo perché la moltiplicazione è nella classe sbagliata.

Ora vai alla tua domanda attuale piuttosto che al codice di esempio.

Se un metodo restituisce qualcosa di diverso da $this , non dovrebbe modificare lo stato di questo. Se un metodo restituisce $ questo o non restituisce alcun valore, allora dovrebbe modificare $this .

Poiché nessuno dei metodi che hai scritto modifica lo stato di $ this, dovrebbero tutti restituire qualcosa di diverso da $ this.

Quanto sopra è noto come separazione query-comando .

Quindi ora, un metodo che modifica lo stato di questo restituisce questo o non restituisce nulla? Restituire ciò in modo coerente consente una facile concatenazione dei metodi $obj->fn1()->fn2() ma limita la capacità dei metodi di eseguire operazioni asincrone, il che significa che non possono agire come proxy per una fonte esterna. È un compromesso. Personalmente, preferisco quest'ultimo. Non vedo alcun punto nel restituire sempre $this perché il chiamante ha già un riferimento a questo e quindi non ha bisogno che tu ci passi indietro.

    
risposta data 31.10.2018 - 02:27
fonte