Quando dovrei passare il valore come variabile di classe e quando come argomento del metodo?

1

C'è una regola generale, quando dovremmo passare un valore come variabile di classe e quando come argomento del metodo? O è solo una scelta dello sviluppatore?

Per esempio - ci sono dei motivi, perché seguire (codice PHP):

class SomeClass
{
    public function __construct()
    {
        $this->id = $_GET['id'];
        $this->showMessage();
    }

    public function showMessage()
    {
        echo 'The ID is '.$this->id;
    }
}

è migliore (o peggio?) di questo:

class SomeClass
{
    public function __construct()
    {
        $this->showMessage($_GET['id']);
    }

    public function showMessage($id)
    {
        echo 'The ID is '.$id;
    }
}

Nota che sto solo chiedendo delle differenze tra il valore di passaggio come variabile di classe e il passare come argomento di metodo. Per favore, non sottolineo che non dovrei mai operare direttamente su superglobali in PHP. Lo so, questo è sbagliato. L'ho usato qui, per semplificare l'esempio.

    
posta trejder 24.02.2014 - 12:05
fonte

1 risposta

4

Se concettualmente il valore è parte dello stato dell'oggetto, dovrebbe essere passato come un campo membro. Se è solo una parte dell'azione specifica dell'invocazione del metodo, dovrebbe essere passata come argomento del metodo.

Ad esempio, supponiamo che oggetti di SomeClass possano essere salvati in un file. Avrai un'azione save ed è necessario passare il percorso del file.

  • Se si passa il percorso come campo membro, ora fa parte dello stato dell'oggetto. Ciò significa che concettualmente, l'oggetto è legato a quel file. Avrebbe senso, ad esempio, caricare l'oggetto dallo stesso file, bloccare altri oggetti dal salvataggio in quel file, sovrascrivere il file senza conferma ecc.

  • Se si passa il percorso come argomento del metodo, non fa parte dello stato dell'oggetto. L'oggetto, dopo essere stato salvato, non potrebbe importare di meno del file. In questo caso, avrebbe senso salvare l'oggetto su file diversi (possibili con nomi incrementali), o chiedere conferma se lo si salva di nuovo sullo stesso file.

La scelta, naturalmente, dovrebbe dipendere dal modo in cui l'oggetto si riferisce al valore in ogni singolo caso.

    
risposta data 24.02.2014 - 12:28
fonte