2009-09-16 7 views
7

Ich habe ein Tutorial verfolgt, um eine einfache Blog-Anwendung in PHP zu schreiben und habe die Klassen in diesem Tutorial so modifiziert, dass sie zusätzliche Fähigkeiten haben. Die Änderung dieser sehr blanken App hat mir ein besseres Verständnis davon vermittelt, wie PHP funktioniert, aber ich habe eine interessante Situation durchgespielt.Ist es wichtig, Eigenschaften explizit in PHP zu deklarieren?

Eine der Klassen in meinem Projekt hat etwa ein halbes Dutzend Klasseneigenschaften wie public $id, public $author, public $post. Diese Eigenschaften werden am Anfang dieser Klasse deklariert, aber ich finde, dass, wenn ich alle bis auf eine dieser Eigenschaften entferne, die App immer noch korrekt funktioniert.

Ist es falsch, eine Eigenschaft Erklärung wie public $datePosted von Anfang an einer Klasse zu entfernen, wenn diese Klasse noch Variablen auf diese Eigenschaft wie folgt zuweist: $this->datePosted = $someVariableName;

Antwort

12

Wenn yo u versuchen zu Zugang eine Klasse Eigenschaft, die nicht deklariert wurde, PHP eine Mitteilung heraus:

class Foo { } 

var $fu = new Foo(); 
echo $fu->baz; 

Notice: Undefined property: Foo::$baz in blah.php on line 4

Wenn Sie einen Wert gesetzt erste ($fu->baz = 'blah'), dann hat es beschwere dich nicht, aber das ist keine gute Situation.

Sie sollten auf jeden Fall alle Ihre Klassenvariablen erklären (es sei denn natürlich wollen Sie mit dem magic methods etwas Spaß haben) ...

8

es klarer für jeden Code zu lesen, dass die Mitglieder gewesen explizit als öffentlich definiert und nicht nur als Standard verwendet, da Sie sie nicht als öffentliche Mitglieder zugewiesen haben.

Auch $this->$datePosted falsch ist, sollte es so aussehen:

$this->datePosted = $someVariable; 

, die sein kann, warum ein Fehler auftritt.

+0

Danke für die Antwort. $ this -> $ datePosted war ein Tippfehler, den Daok behoben hat. Es war eigentlich kein Problem in meinem Code. – somas1

2

Auch, wenn Sie Deklaration entfernen und den Code liest diese Variable, bevor es zu writting, erhalten Sie einen Fehler haben wie

PHP Hinweis: Nicht definierte Eigenschaft: A :: $ unexistent in C: \ temp \ test.php auf Linie 8

Hinweis: Nicht definierte Eigenschaft: A :: $ unexistent in C: \ temp \ test.php auf Linie 8

5

PHP wirklich locker, ist, wie es behandelt Definitionen Klassenmitglied. Sie technisch müssen sie nicht deklarieren. Aber Sie sollte, für zwei große Gründe:

  • Menschen mit cleveren IDE (Eclipse Aptana, Zend Studio) werden es lieben, wenn sie Vorteile der ihre Editor Code intellisense nehmen können (auto-complete) während der Arbeit mit deine Klassen. Diese Funktion hilft wirklich, Tippfehler zu vermeiden. Wenn Sie Ihre Felder nicht deklarieren, hat die IDE keine Möglichkeit, die Felder der Klasse zu bestimmen.

  • Jemand, der gerade mit einer kompilierten Sprache (C++) arbeitet, wird wahrscheinlich einen Killer nach dir schicken, wenn er einen Mangel an richtig definierten Feldern sieht. Es ist nur eine gute Übung, sie zu deklarieren. Es gibt keinen Grund, es nicht zu tun.

Verwandte Themen