2008-12-31 6 views
6

In meinem Streben, mehr über OOP in PHP zu lernen. Ich bin einige Male auf die Konstruktorfunktion gestoßen und kann sie einfach nicht mehr ignorieren. Nach meinem Verständnis wird der Konstruktor in dem Moment aufgerufen, in dem ich ein Objekt erstelle, ist das korrekt?Vorteile der Verwendung eines Konstruktors?

Aber warum müsste ich diesen Konstruktor erstellen, wenn ich "normale" Funktionen oder Methoden als ihre aufgerufenen verwenden kann?

prost, Keith

+0

Siehe auch http://stackoverflow.com/questions/403756/benefits-of-using-a-constructor, die die gleiche Frage stellt – Adam

+1

ha ha, das ist urkomisch. Das ist meine Frage, die ich völlig vergessen habe. Ich habe in den verwandten Fragen nachgesehen, als ich meine Frage gestellt habe, und nichts gesehen. Entschuldigung, da ich diese Frage nicht löschen kann, da es zu viele Antworten gibt. –

+0

Noch 2 Jahre, nichts gejagt))) – zerkms

Antwort

9

Ja der Konstruktor aufgerufen wird, wenn das Objekt erstellt wird.

Ein kleines Beispiel für die Nützlichkeit eines Konstruktor ist dies

class Bar 
{ 
    // The variable we will be using within our class 
    var $val; 

    // This function is called when someone does $foo = new Bar(); 
    // But this constructor has also an $var within its definition, 
    // So you have to do $foo = new Bar("some data") 
    function __construct($var) 
    { 
     // Assign's the $var from the constructor to the $val variable 
     // we defined above 
     $this->val = $var 
    } 
} 

$foo = new Bar("baz"); 

echo $foo->val // baz 

// You can also do this to see everything defined within the class 
print_r($foo); 

UPDATE: Eine Frage auch, warum verwendet wird diese gebeten, sollte ein richtiges Beispiel eine Datenbank-Klasse, wo Sie das Objekt aufrufen mit der Benutzername und das Passwort und die Tabelle, zu der eine Verbindung hergestellt werden soll, mit der sich der Konstruktor verbinden würde. Dann haben Sie die Funktionen, um alle Arbeiten innerhalb dieser Datenbank zu erledigen.

+0

Danke für die Antwort Ólafur. Könnten Sie, wenn möglich, jede Zeile kommentieren, damit ich sie besser verstehe? K –

+0

Vielen Dank für Ihre Erklärung, aber nicht in der Lage, Ihr richtiges Beispiel zu verstehen, können Sie bitte mehr darüber erklären? danke im voraus. – sradha

28

Mit dem Konstruktor können Sie sicherstellen, dass das Objekt in einen bestimmten Zustand versetzt wird, bevor Sie es verwenden. Wenn Ihr Objekt beispielsweise über bestimmte Eigenschaften verfügt, die für die Verwendung benötigt werden, könnten Sie diese im Konstruktor initialisieren. Konstruktoren ermöglichen außerdem eine effiziente Methode zum Initialisieren von Objekten.

6

Die Idee des Konstruktors besteht darin, erste Datenpakete für das Objekt vorzubereiten, damit es sich erwartungsgemäß verhalten kann.

Just call a method ist kein Deal, weil Sie vergessen können, dies zu tun, und dies kann nicht als "erforderlich vor der Arbeit" in der Syntax angegeben werden - so erhalten Sie "gebrochenes" Objekt.

+1

@Keith: Um Wikipedia zu zitieren (und ich normalerweise nicht, aber es ist in diesem Fall gut geschrieben): "[Die Konstruktoren] haben die Aufgabe, die Datenmitglieder des Objekts zu initialisieren und die Invariante der Klasse zu etablieren, falls nicht Die Invariante ist nicht gültig Ein korrekt geschriebener Konstruktor wird das Objekt in einem gültigen Zustand belassen." – netcoder

+1

@netcoder: yep, ich habe gleich nach dem Schreiben meiner Antwort nachgesehen - um mich selbst zu testen ;-) Da es keinen signifikanten Unterschied gibt und da SO eine Seite ist wo ** Leute antworten ** (nicht nur Copy-Paste) - Ich werde meins verlassen, auch wenn es mit schlechteren Englisch geschrieben wird ;-) – zerkms

2

Konstruktoren sind gut für eine Vielzahl von Dingen. Sie initialisieren Variablen in Ihrer Klasse. Angenommen, Sie erstellen eine BankAccount-Klasse. $ b = neues Bankkonto (60); hat einen Konstruktor, der dem Bankkonto einen Anfangswert gibt. Sie setzen Variablen grundsätzlich innerhalb der Klasse oder sie initialisieren auch andere Klassen (Vererbung).

2

Der Konstruktor wird initialisiert, wenn ein Objekt erstellt wird.

Sie würden keine willkürliche Methode für ein neu erstelltes Objekt aufrufen, da dies der Idee der Kapselung widerspricht und Code mit diesem Objekt erfordern würde, um inhärentes Wissen über seine inneren Abläufe zu haben (und mehr Aufwand erfordert).

+1

Aufruf einer Setter-Methode, pro Beispiel, nachdem das Objekt erstellt wurde, verletzen Sie die Kapselung überhaupt nicht.Der Konstruktor wird verwendet, um Eigenschaften/Argumente zu definieren Objekte müssen sich wie erwartet verhalten – netcoder

+0

@netcoder True, aber wenn der Konstruktor, sagen wir, eine Verbindung zu einer Datenbank herstellt, würden Sie nicht unbedingt erwarten, dass der aufrufende Code eine Methode aufrufen muss, um dies zu tun nicht einmal den Anrufcode, um zu wissen, woher das Objekt seine Informationen bezieht – Adam