[Php] Für welche Funktion wird __construct verwendet?


Answers

__construct() ist der Methodenname für den constructor . Der Konstruktor wird für ein Objekt aufgerufen, nachdem es erstellt wurde, und ist ein guter Ort, um Initialisierungscode usw. zu setzen.

class Person {

    public function __construct() {
        // Code called for each new Person we create
    }

}

$person = new Person();

Ein Konstruktor kann Parameter auf normale Weise akzeptieren, die beim Erstellen des Objekts übergeben werden, z

class Person {

    public $name = '';

    public function __construct( $name ) {
        $this->name = $name;
    }

}

$person = new Person( "Joe" );
echo $person->name;

Im Gegensatz zu einigen anderen Sprachen (z. B. Java) unterstützt PHP keine Überladung des Konstruktors (dh mehrere Konstruktoren, die unterschiedliche Parameter akzeptieren). Sie können diesen Effekt mit statischen Methoden erzielen.

Hinweis : Ich habe dies aus dem Protokoll der (zum Zeitpunkt dieses Schreibens) angenommenen Antwort abgerufen.

Question

Ich habe bemerkt, dass __construct viel mit Klassen gebaut habe. Ich habe ein wenig gelesen und im Internet gesurft, aber ich konnte keine Erklärung finden, die ich verstehen könnte. Ich fange gerade mit OOP an.

Ich habe mich gefragt, ob jemand mir eine allgemeine Vorstellung davon geben könnte, was es ist und dann ein einfaches Beispiel, wie es mit PHP verwendet wird?




Ich hoffe diese Hilfe:

<?php
    // The code below creates the class
    class Person {
        // Creating some properties (variables tied to an object)
        public $isAlive = true;
        public $firstname;
        public $lastname;
        public $age;

        // Assigning the values
        public function __construct($firstname, $lastname, $age) {
          $this->firstname = $firstname;
          $this->lastname = $lastname;
          $this->age = $age;
        }

        // Creating a method (function tied to an object)
        public function greet() {
          return "Hello, my name is " . $this->firstname . " " . $this->lastname . ". Nice to meet you! :-)";
        }
      }

    // Creating a new person called "boring 12345", who is 12345 years old ;-)
    $me = new Person('boring', '12345', 12345);

    // Printing out, what the greet method returns
    echo $me->greet(); 
    ?>

Für weitere Informationen müssen Sie auf codecademy.com




Ich glaube, dass die Funktion __construct () {...} ein Stück Code ist, das immer wieder als Ersatz für TheActualFunctionName () {...} . Wenn Sie den CLASS-Namen ändern, müssen Sie nicht innerhalb des Codes ändern, da das generische __construct immer auf den tatsächlichen Klassennamen verweist ... was auch immer es ist. Sie codieren weniger ... oder?




Ich denke, das ist wichtig für das Verständnis des Zwecks des Konstruktors.
Auch nachdem ich die Antworten hier gelesen hatte, brauchte ich ein paar Minuten, um es zu erkennen, und hier ist der Grund.
Ich habe es mir zur Angewohnheit gemacht, alles, was initiiert oder vorkommt, explizit zu kodieren. Mit anderen Worten, das wäre meine Katzenklasse und wie ich es nennen würde.

class_cat.php

class cat {
    function speak() {
        echo "meow";  
    }
}

somepage.php

include('class_cat.php');
mycat = new cat;
$speak = cat->speak();
echo $speak;

Wo in @Logan Sermans gegebenen "class cat" -Beispielen wird angenommen, dass jedes Mal, wenn Sie ein neues Objekt der Klasse "cat" erstellen, die Katze "miauen" soll, anstatt darauf zu warten, dass Sie die Funktion aufrufen, um miauen zu können.

Auf diese Weise dachte mein Verstand explizit darüber nach, wo die Konstruktormethode Implizit verwendet und das machte es anfangs schwierig zu verstehen.




Die Methode __construct dient zum Übergeben von Parametern, wenn Sie ein Objekt zum ersten Mal erstellen. __construct ist üblich. Wenn Sie zum Zeitpunkt der Erstellung keine Parameter übergeben möchten, brauchen Sie sie nicht.

Damit:

// Create a new class, and include a __construct method
class Task {

    public $title;
    public $description;

    public function __construct($title, $description){
        $this->title = $title;
        $this->description = $description;
    }
}

// Create a new object, passing in a $title and $description
$task = new Task('Learn OOP','This is a description');

// Try it and see
var_dump($task->title, $task->description);



Hinweis: Übergeordnete Konstruktoren werden nicht implizit aufgerufen, wenn die Kindklasse einen Konstruktor definiert. Um einen übergeordneten Konstruktor auszuführen, ist ein Aufruf von parent::__construct() innerhalb des Kindkonstruktors erforderlich. Wenn das Kind keinen Konstruktor definiert, kann es wie eine normale Klassenmethode von der Elternklasse geerbt werden (wenn es nicht als privat deklariert wurde).