Tach!
Douglas Crockfort hebt bei seiner in den Augen einiger peniblen Art der Code-Konventionen immer wieder hervor, dass es um die Lesbarkeit des Codes geht. Intantiiere ich Variablen am Anfang einer Klasse, geht es ja wohl nur um die Lesbarkeit. Man liest, dass es sie gibt und welchen Anfangswert sie haben (aus dem man dann auch u.U. schließen kann, was mal draus werden soll). Der Kommentar gehört natürlich dazu. Aber ohne Variablendefinition ja wohl kein Kommentar, so zumindest verstehe ich die in meinen Augen bisher sehr sinnvolle Konvention beim Zend Framework.
Unterscheide
class foo {
function qux() {
echo $this->bar;
}
}
und
class foo {
var $bar;
function qux() {
...
}
und
class foo {
var $bar = null;
function qux() {
...
}
Das $bar ganz wegzulassen und dann zu verwenden ist normalerweise nicht besonders sinnvoll oder praktisch. (Eine Ausnahme wäre Get/Set-Magie). Also Variante 1 scheidet schonmal aus. Es geht in diesem Zweig nur um die Varianten zwei und drei. $bar ist also in jedem Fall vorhanden. Variante drei hat ein überflüssiges "= null". Ebenso überflüssig wären andere Werte, die im Konstruktor sowieso überschrieben werden. In diesen beiden Fällen eine Zuweisung vorzunehmen, dient lediglich der Prinzip-Befriedigung. (Wenn ich das in C# mache, dann kassiert das der ReSharper ein.) Unnützer Code verschlechtert in meinen Augen die Lesbarkeit (genauso wie if ($var == true) und Konsorten).
Wenn ich programmiere und dabei ein anderes System verwende, will ich nicht immer in dessen Code schauen, um wichtige Informationen zu bekommen. Wichtige Dinge, darunter zählen auch Default-Werte, sollten in der Inline-Dokumentation erwähnt sein, die mir meine IDE direkt in meinen Code einblendet, wenn ich irgendwas verwende. Und dann ist es auch praktisch egal, ob der Wert nun explizit oder erst im Konstruktor gesetzt wird.
dedlfix.