2012-03-16 5 views
6

Mi sono chiesto se una proprietà di classe viene creata un'istanza e utilizzata solo in un metodo di classe se si tratta di una proprietà di classe o dovrebbe essere solo una variabile locale accessibile solo a quel metodo di classe?Devo mantenere le variabili utilizzate solo in un metodo di classe locale o dichiararle come proprietà di classe?

Per esempio, devo mantenere una variabile utilizzata solo in un metodo come variabile locale come questo:

class myClass 
{ 
    public function myMethod() 
    { 
     $_myVariableUsedOnlyOnce = "Hello World"; 
     echo $_myVariableUsedOnlyOnce; 
    } 
} 

o devo fare la variabile di una proprietà di classe privata in questo modo:

class myClass 
{ 
    private $_myVariableUsedOnlyOnce; 

    public function myMethod() 
    { 
     $this->_myVariableUsedOnlyOnce = "Hello World"; 
     echo $this->_myVariableUsedOnlyOnce; 
    } 
} 

Quale approccio "puzza"? Quali sono i vantaggi nel rendere tutte le proprietà della classe delle variabili del metodo diverse da quando ho bisogno di stampare l'intero oggetto per scopi di debug?

Grazie

+1

Se sei sicuro che verrà usato una sola volta, renderlo locale al metodo. Altrimenti, hai ragione a renderlo privato. _In assenza_ è necessario che il valore di tale variabile permanga tra le chiamate di quel metodo, in cui dovrebbe almeno essere 'statico' nel metodo. –

risposta

4

Se è necessario avere la persistenza tra le chiamate di funzione, una proprietà di classe sarebbe la migliore in modo che si sposti come fa l'oggetto. Potrebbe anche volere usarlo per altri motivi in ​​futuro in altre funzioni. Tuttavia, aggiunge un sovraccarico.

Generalmente, la classe dovrebbe avere un analogo del mondo reale, quindi se la variabile corrisponde a qualcosa che ha senso, ad es. una classe persona ha un'altezza $, quindi appartiene come una proprietà di classe. Altrimenti, se è solo una parte dei calcoli interni di un metodo, allora non appartiene realmente alla classe ad es. una persona non ha $ shoelaceIterator o altro.

Direi che un design di oggetto confuso sarebbe più un odore di un sovraccarico di memoria potenzialmente piccolo (anche se questo dipende da quanto è grande la variabile).

0

Prima vorrei chiedere se si ha realmente bisogno la variabile/proprietà a tutti, se si utilizzano solo una volta. Per quanto riguarda i "odori", una proprietà viene archiviata in memoria per l'intera vita dell'oggetto, mentre la variabile è solo in memoria fino al termine dell'esecuzione del metodo.

+0

Ovviamente questo era solo un semplice esempio e farei di più con la variabile nel metodo piuttosto che fare eco a "Hello World". Ma grazie, vedo il vantaggio in termini di allocazione della memoria. – Tom

+0

Non è solo l'allocazione della memoria, come "zedat" ha sottolineato anche la sua velocità. – nathanjosiah

0

Se non è necessaria una variabile esterna al metodo, non dovrebbe essere una proprietà della classe. Inoltre, l'accesso alle variabili locali è più veloce.

0

In un approccio di progettazione puro, suggerirei di fare la vostra scelta in base a ciò che l'attributo/proprietà dovrebbe modellare.

In termini puramente di prestazioni, avere un attributo statico è migliore perché lo spazio di memoria non verrà assegnato a ciascuna istanza della classe.

1

Queste variabili locali non sono proprietà dell'oggetto.

Non stanno definendo il tuo oggetto, quindi non dovrebbero essere dichiarati come membri privati.

Problemi correlati