Betrachten Sie den folgenden Code, in dem der Setter absichtlich aufgrund eines profanen Programmierfehlers beschädigt wird, den ich in der Vergangenheit einige Male für real gemacht habe:
<?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();
?>
Die Tatsache, dass ich $testFieldan der Spitze der Klasse deklariert habe, hilft mir, diesen Programmierfehler vor mir zu verbergen. Wenn ich das Feld nicht deklariert hätte, würde beim Aufrufen dieses Skripts etwas Ähnliches wie die folgende Warnung in mein Fehlerprotokoll gedruckt, was möglicherweise hilfreich für mein Debugging wäre - insbesondere, wenn ich einen solchen Fehler in machen würde eine große und komplizierte reale Anwendung:
PHP-Hinweis: Undefinierte Eigenschaft: TestClass :: $ testField in /var/www/test.php in Zeile 13
Mit der Erklärung gibt es keine Warnung.
Vielleicht fehlt mir etwas, aber ich kenne nur zwei Gründe, um Klassenfelder in PHP zu deklarieren: Erstens, dass die Deklarationen als Dokumentation dienen, und zweitens, dass man ohne Deklarationen die Modifikatoren privateund protectedaccess nicht verwenden kann wohl nützlich. Da das letztere Argument nicht für öffentliche Felder gilt - die Zuweisung zu einem nicht deklarierten Feld eines Objekts macht es öffentlich -, sollte ich zumindest alle meine öffentlichen Felddeklarationen auskommentieren. Die Kommentare liefern genau den gleichen Dokumentationswert, aber ich werde von Warnungen profitieren, wenn ich versuche, ein nicht initialisiertes Feld zu lesen.
Bei weiteren Überlegungen scheint es jedoch nicht sinnvoll zu sein, hier anzuhalten. Da meiner Erfahrung nach der Versuch, ein nicht initialisiertes Feld zu lesen, eine viel häufigere Fehlerursache ist als der Versuch, ein privates oder geschütztes Feld unangemessen zu lesen oder zu ändern (das erstere habe ich bereits in meiner kurzen Programmierkarriere mehrmals gemacht, das letztere jedoch nie ), es scheint mir, als wäre es eine bewährte Methode, alle Felddeklarationen - nicht nur die öffentlichen - zu kommentieren.
Was mich zögern lässt, ist, dass ich noch nie jemanden gesehen habe, der dies in seinem Code getan hat. Warum nicht? Hat das Deklarieren von Klassenfeldern, die mir nicht bekannt sind, einen Vorteil? Oder kann ich die PHP-Konfiguration auf irgendeine Weise ändern, um das Verhalten von Felddeklarationen so zu ändern, dass ich echte Felddeklarationen verwenden und trotzdem von Warnungen "Undefinierte Eigenschaften" profitieren kann? Oder gibt es noch etwas, das ich in meiner Analyse übersehen habe?
TRUE === $variableSie sich nicht versehentlich die Zuordnung statt zu vergleichen.