Heim  >  Artikel  >  Backend-Entwicklung  >  Prinzipielle Analyse von Konstruktoren und Destruktoren

Prinzipielle Analyse von Konstruktoren und Destruktoren

王林
王林nach vorne
2020-07-10 17:56:492971Durchsuche

Prinzipielle Analyse von Konstruktoren und Destruktoren

Konstruktor

__construct ([ mixed $args [, $... ]] ) : void

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();
?>

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
  }
}

Destruktor

__destruct ( void ) : void

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();

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen