Considera il seguente codice, in cui il setter viene deliberatamente interrotto a causa di un banale errore di programmazione che ho fatto davvero alcune volte in passato:
<?php
class TestClass {
private $testField;
function setField($newVal) {
$testField = $newVal;
// deliberately broken; should be `$this->testField = $newVal`
}
function getField() {
return $this->testField;
}
}
$testInstance = new TestClass();
$testInstance->setField("Hello world!");
// Actually prints nothing; getField() returns null
echo $testInstance->getField();
?>
Il fatto che ho dichiarato $testFieldai vertici della classe mi aiuta a nascondere questo errore di programmazione. Se non avessi dichiarato il campo, avrei ricevuto qualcosa di simile al seguente avviso stampato nel mio registro degli errori dopo aver chiamato questo script, il che sarebbe potenzialmente utile per aiutare il mio debug, specialmente se dovessi fare un errore come questo in un'applicazione grande e complicata nel mondo reale:
Avviso PHP: Proprietà non definita: TestClass :: $ testField in /var/www/test.php sulla riga 13
Con la dichiarazione, non vi è alcun avviso.
Forse mi manca qualcosa, ma sono a conoscenza di due soli motivi per dichiarare i campi di classe in PHP: in primo luogo, che le dichiarazioni fungono da documentazione e, in secondo luogo, che senza dichiarazioni non è possibile utilizzare i modificatori privatee protectedaccedere, che sono probabilmente utile. Poiché quest'ultimo argomento non si applica ai campi pubblici - l'assegnazione a un campo non dichiarato di un oggetto lo rende pubblico - mi sembra che dovrei almeno commentare tutte le mie dichiarazioni di campo pubblico. I commenti forniranno lo stesso identico valore della documentazione, ma trarrò vantaggio dagli avvisi se provo a leggere un campo non inizializzato.
Ripensandoci, però, non ha senso fermarsi qui. Poiché nella mia esperienza il tentativo di leggere un campo non inizializzato è una causa di errore molto più comune rispetto al tentativo di leggere o modificare in modo inappropriato un campo privato o protetto (ho già fatto il primo più volte nella mia breve carriera di programmatore, ma mai il secondo ), mi sembra che commentare tutte le dichiarazioni sul campo - non solo quelle pubbliche - sarebbe la migliore pratica.
Ciò che mi fa esitare è che non ho mai visto nessun altro farlo nel loro codice. Perchè no? C'è un vantaggio nel dichiarare campi di classe di cui non sono a conoscenza? O posso modificare la configurazione di PHP in qualche modo per cambiare il comportamento delle dichiarazioni di campo in modo da poter usare dichiarazioni di campo reali e beneficiare ancora degli avvisi "Proprietà indefinita"? O c'è qualcos'altro che mi è sfuggito nella mia analisi?
TRUE === $variableper impedirti di assegnare accidentalmente invece di confrontare.