2010-12-10 6 views
6

Sto facendo una nuova classe in PHP. Non prevedo che questa lezione sia mai stata estesa. Dovrei preoccuparmi di rendere privati ​​i membri della classe e di implementare le funzioni getter e setter?Dovrei preoccuparmi di getter e setter in PHP?

Una parte di me pensa che questa sia solo una grande perdita di tempo e serve solo a far aumentare il volume del mio codice.

La classe è per un curriculum. Lo sto scrivendo in codice per dimostrare il mio stile di codifica. La domanda è: un datore di lavoro vorrà vedere getter e setter, o questo farà solo confusione?

+1

Puoi fornire alcune informazioni sulla tua classe? – RDL

+0

È per un curriculum. Lo sto scrivendo in codice. La domanda è: un datore di lavoro vorrà vedere getter e setter, o questo farà solo confusione? – james

+1

che fa una grande differenza nel modo di rispondere alla tua domanda; potresti voler modificare la tua domanda per aggiungere quelle informazioni. –

risposta

2

Non mi preoccuperei se fossi in te. Hai ragione, quella decorazione potrebbe ingombrare la tua classe.

1

Vuoi fare qualcosa di speciale sul set o ottenere (o solo uno di loro privato)?

In caso contrario, non perdere tempo con questi.

Non si guadagna nulla a fare questo se non vengono utilizzati in modo "speciale" e forse è anche rallentare tutto giù

+1

Potresti ottenerlo se hai bisogno di fare qualcosa di speciale sui valori in futuro. –

3

Forse non saprai mai che non dovrai prolungare la lezione in futuro. Cosa farà la classe? Quanto è complesso?

L'incapsulamento fa parte di un buon design OO. Ma il buon design OO non è l'obiettivo della programmazione. L'obiettivo è quello di far funzionare le cose ed essere in grado di modificarle facilmente quando necessario.

0

Se non si prevede di avere un comportamento specifico durante l'impostazione o l'accesso a tali proprietà, non importa molto.

Se è necessario avere un comportamento specifico durante l'accesso o la modifica di tali proprietà in un secondo momento, è sempre possibile sovraccaricare il metodo __set e __get.

See: http://php.net/manual/en/language.oop5.overloading.php

+0

I metodi magici sono lenti. Queste non sono sostituzioni per getter e setter corretti. – Gordon

2

mi piace fare le proprietà della mia classe protected o private e quindi utilizzare getter e setter. Quindi utilizzo il codice nei setter per accertarmi che i valori delle proprietà siano compresi negli intervalli accettati. Mi piace questo approccio perché trovo che rende il debug più facile in quanto posso sempre essere sicuro che venga impostato un valore accettato o che venga lanciata un'eccezione. Mi dà anche più fiducia che quando passo oggetti attorno ai valori contenuti nelle proprietà non farò esplodere altro.

6

Non voglio ripetere ancora una volta la tesi secondo cui anche quello che non ti aspetti eredità ora, si può ancora bisogno in futuro, ma sono ancora più motivi per utilizzare getter e setter:

  • Getter e setter consentono di implementare facilmente la convalida delle proprietà
  • Il codice seguirà le linee guida per la codifica e in quanto tale sarà più facile da leggere da altri. Se mi imbattessi in un file di codice che non utilizzava getter e setter, sarei molto scettico a riguardo e dovrei leggerlo attentamente molte volte.
  • Anche questa non è solo una decisione per classe, ma una decisione per l'intero progetto. Vuoi avere getter e setter per alcune classi di cui hai bisogno e non per altri? Credo che la coerenza sia importante.
  • Ci sono strumenti che possono generare automaticamente la scrittura dei getter e setter per te. Ricorda che scrivi il codice una sola volta, ma lo leggi molte volte,
+0

Per aggiungere, si dovrebbe anche avere getter e setter anche per proprietà private. Il tuo codice interno dovrebbe avere solo un punto per leggere e scrivere da & a una proprietà interna. – Rafa

4

Controlla i metodi magici __get e __set, manterrà il tuo codice pulito e non dovrai sentirti pigro per non impostare scopel variabile.

public function __get($name) 
{ 
    return $this->$name; 
} 

public function __set($name, $value) 
{ 
    $this->$name = $value; 
} 

Ovviamente avresti maggiori dettagli, ma che gestiranno i tuoi accessors.

+1

I metodi magici sono lenti. Queste non sono sostituzioni per getter e setter corretti. – Gordon

+0

Rendono il codice più facile da leggere e non riducono significativamente il throughput. –

2

Se è per un curriculum, è probabile che si preoccupino altrettanto (o più) della tua logica come fanno i piccoli dettagli come getter/setter.

Se fosse io, li renderei pubblici senza getter/setter, ma includo un commento sopra di loro, dicendo qualcosa del tipo "considera la possibilità di renderli privati ​​e l'utilizzo di getter/setter in base all'ambito dell'applicazione e lo stile di codice preferito della squadra"

questo modo:

  1. il codice curriculum non è ingombra

  2. capiscono che il tutto non solo pigro e fare pubblica per nessun motivo

  3. dimostra che invece di seguire ciecamente un particolare stile, ci si considera la particolare applicazione nel prendere una decisione.