Prinzipielle Analyse von Konstruktoren und Destruktoren

王林
Freigeben: 2023-03-02 11:04:02
nach vorne
2959 Leute haben es durchsucht

Prinzipielle Analyse von Konstruktoren und Destruktoren

Konstruktor

__construct ([ mixed $args [, $... ]] ) : void
Nach dem Login kopieren

PHP 5 ermöglicht es Entwicklern, eine Methode als Konstruktor in einer Klasse zu definieren. Klassen mit einem Konstruktor rufen diese Methode jedes Mal auf, wenn ein neues Objekt erstellt wird. Daher eignet sie sich sehr gut für einige Initialisierungsarbeiten vor der Verwendung des Objekts.

(Empfohlenes Tutorial: php-Tutorial )

Hinweis: Wenn ein Konstruktor in einer Unterklasse definiert ist, wird der Konstruktor seiner übergeordneten Klasse nicht implizit aufgerufen. Um den Konstruktor der übergeordneten Klasse auszuführen, müssen Sie parent::__construct() im Konstruktor der untergeordneten Klasse aufrufen. Wenn die Unterklasse keinen Konstruktor definiert, wird sie wie eine gewöhnliche Klassenmethode von der übergeordneten Klasse geerbt (sofern sie nicht als privat definiert ist).

Codebeispiel:

<?php
class BaseClass {
  function __construct() {
    print "In BaseClass constructor\n";
  }
}

class SubClass extends BaseClass {
  function __construct() {
    parent::__construct();
    print "In SubClass constructor\n";
  }
}

class OtherSubClass extends BaseClass {
  // inherits BaseClass&#39;s constructor
}

// In BaseClass constructor
$obj = new BaseClass();

// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();

// In BaseClass constructor
$obj = new OtherSubClass();
?>
Nach dem Login kopieren

Wenn PHP 5 aus Gründen der Abwärtskompatibilität die Funktion __construct() in der Klasse nicht finden kann und keine von der übergeordneten Klasse erbt, wird versucht, eine alte zu finden -style-Konstruktor, eine Funktion mit demselben Namen wie die Klasse. Ein Kompatibilitätsproblem tritt also nur dann auf, wenn die Klasse bereits über eine Methode namens __construct() verfügt, diese aber für andere Zwecke verwendet wird.

Im Gegensatz zu anderen Methoden generiert PHP keine E_STRICT-Fehlermeldung, wenn __construct() von einer Methode mit anderen Parametern als der übergeordneten Klasse __construct() überschrieben wird.

Seit PHP 5.3.3 werden im Namespace Methoden mit demselben Namen wie der Klassenname nicht mehr als Konstruktoren verwendet. Diese Änderung wirkt sich nicht auf Klassen aus, die sich nicht im Namespace befinden.

Codebeispiel:

<?php
namespace Foo;
class Bar {
  public function Bar() {
    // treated as constructor in PHP 5.3.0-5.3.2
    // treated as regular method as of PHP 5.3.3
  }
}
Nach dem Login kopieren

Destruktor

__destruct ( void ) : void
Nach dem Login kopieren

PHP 5 führte das Konzept des Destruktors ein, das anderen objektorientierten Sprachen ähnelt, z C++. Ein Destruktor wird ausgeführt, wenn alle Verweise auf ein Objekt gelöscht wurden oder wenn das Objekt explizit zerstört wird.

Codebeispiel:

<?php
class MyDestructableClass {
  function __construct() {
    print "In constructor\n";
    $this->name = "MyDestructableClass";
  }

  function __destruct() {
    print "Destroying " . $this->name . "\n";
  }
}

$obj = new MyDestructableClass();
Nach dem Login kopieren

Wie der Konstruktor wird auch der Destruktor der übergeordneten Klasse nicht heimlich von der Engine aufgerufen. Um den Destruktor der übergeordneten Klasse auszuführen, muss parent::__destruct() explizit im Destruktorkörper der untergeordneten Klasse aufgerufen werden. Darüber hinaus erbt die Unterklasse genau wie der Konstruktor die übergeordnete Klasse, wenn sie keinen Destruktor definiert.

Der Destruktor wird auch dann aufgerufen, wenn das Skript mit exit() beendet wird. Durch den Aufruf von „exit()“ im Destruktor werden die verbleibenden Shutdown-Vorgänge abgebrochen.

Das obige ist der detaillierte Inhalt vonPrinzipielle Analyse von Konstruktoren und Destruktoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage