Einführung in Destructor in PHP

PHP hat eine Destruktor-Methode eingeführt, die der in anderen OOP-Sprachen wie C ++ entspricht. Wie der Name schon sagt, ist ein Destruktor die Bedeutung eines Objekts, wenn es zerstört wird oder wenn das Skript unterbrochen oder gestoppt wird. Konstruktoren sind Mitglieder von Sonderfunktionen für die neu erstellten Objektinstanzen. Destruktoren sind das genaue Gegenteil von Konstruktoren und werden aufgerufen, wenn die erstellte Instanz aus dem Speicher gelöscht wird.

Ein Konstruktor wird von der Funktion __construct () aufgerufen, während ein Destruktor mit der Funktion __destruct () aufgerufen wird, die PHP am Ende des Skripts automatisch aufruft. Wenn im Grunde genommen keine Referenzen mehr zu einem Objekt in irgendeiner Reihenfolge vorhanden sind, wird automatisch ein Destruktor aufgerufen.

Grundlegende Syntax zum Aufrufen eines Destruktors: Die Funktion __destruct (),

Syntax:

__destruct ( void ) : void

Für jeden aufzurufenden Destruktor muss ein Konstruktor vorhanden sein, wie unten gezeigt:

<_?php
class (
// Declaring a constructor
function __construct() (
// To initialize required properties
)
// Declaring a destructor
function __destruct() (
// To remove reference of an object
)
)
?>

Funktionsweise von Destructor in PHP

Destructor wird im Grunde genommen vom Garbage Collector verwaltet, der ein Objekt löscht, wenn es nicht mehr benötigt wird. Es kann im Gegensatz zum Konstruktor keine Argumente als Eingabe verwenden.

Diese Methode wird auch zum Bereinigen von Ressourcen und zum Freigeben des Speichers für mehr Speicherplatz verwendet. Das Überladen kann nicht mit Destruktoren durchgeführt werden und es kann nur ein einziger Destruktor in derselben Klasse existieren. Eine weitere Besonderheit ist, dass der Destruktor auch dann aufgerufen wird, wenn das Skript mit Hilfe eines Befehls exit () die Ausführung angehalten hat. Mit diesem exit () können die verbleibenden Shutdown-Methoden nicht beendet werden.

Beispiele für Destruktor in PHP

Nehmen wir einige Beispiele, um Destruktor besser zu verstehen:

Beispiel 1

Dies ist ein einfaches Beispiel, in dem wir eine grundlegende Konstruktorfunktion erstellen und diese dann durch Aufrufen der Destruktorfunktion zerstören.

Code:

<_?php
class DestructableExample
(
function __construct() (
print "Inside constructor\n";
)
function __destruct() (
print "Destroying the class " . __CLASS__ . "\n";
)
)
$obj = new DestructableExample();

Ausgabe:

Beispiel # 2

In diesem Beispiel verwenden wir zwei Variablen im Konstruktor. Vorname und Nachname des Mitarbeiters und dann zerstören wir das Objekt Employee, kurz bevor der PHP-Code mit dem Aufruf des Destruktors endet.

Code:

<_?php
class Employee (
// Employee's first name
private $emp_fname;
// Employee's last name
private $emp_lname;
// Declaration of constructor
public function __construct($emp_fname, $emp_lname) (
echo "Initialisation of object as follows…
";
$this->emp_fname = $emp_fname;
$this->emp_lname = $emp_lname;
)
// Declaration of destructor
public function __destruct()(
// Here we can clean the resources
echo "Removing the Object…";
)
// This method is being used to display full name
public function showName() (
echo "Employee full name is: " . $this->emp_fname . " " . $this->emp_lname . "
";
)
)
// Class object declaration
$harry = new Employee("Harry", "Potter");
$harry->showName();
?>

Ausgabe:

Beispiel # 3

In diesem Beispiel wird gezeigt, wie eine Datei test_doc.txt behandelt wird, die ein erforderliches Textdokument ist, das sich im selben Arbeitsverzeichnis wie die Hauptdatei befindet. Stellen Sie sicher, dass die Datei test_doc.txt Text enthält, der als Teil des Codes angezeigt werden muss.

fopen ist die eingebaute Funktion zum Öffnen der Datei und fread ist die Funktion zum Lesen des Inhalts der Datei. Hier wird der Destruktor aufgerufen, um das Dateihandle zu schließen / zu zerstören.

Code:

<_?php
header("Content-type: text/plain");
class Example (
/**
* Declaring an identifier
* variable- string
*/
private $first_name;
/**
* A reference to another Foo object
* variable Foo
*/
private $setlink;
public function __construct($first_name) (
$this->first_name = $first_name;
)
public function setLink(Example $setlink)(
$this->setlink = $setlink;
)
public function __destruct() (
echo 'Destroying: ', $this->first_name, PHP_EOL;
)
)
// We are creating 2 objects here
$obj1 = new Example('Example 1');
$obj2 = new Example('Example 2');
// Objects are made to point to themselves
$obj1->setLink($obj1);
$obj2->setLink($obj2);
// Destroying their global references
$obj1 = null;
$obj2 = null;
// Since both objects are declared null we cannot access them now and hence they must be destroyed
// but since they are not yet destroyed a memory leak may occur as they are still present.
//
// Garbage collector can be called as shown in below line. Uncomment to check its functionality
// gc_collect_cycles();
// Now we create 2 more objects but will not set their references
// only the obj1 and obj2 are pointing to them right now
$obj1 = new Example('Example 3');
$obj2 = new Example('Example 4');
// Removing their global references
$obj1 = null;
$obj2 = null;
// Now the Example 3 and example 4 cannot be accessed due to no references
// for them. Hence the destructor is called automatically
// previous to the execution of next line
echo 'Script has ended', PHP_EOL;
?>

Ausgabe:

Wie im Code erwähnt, erhalten wir die folgende Ausgabe, wenn wir die Funktion gc_collect_cycles () in der Mitte des Skripts auskommentieren:

Beispiel # 4

<_?php
class FileHandle(
private $file_handle;
private $name;
/**
* We declare file handle with parameters file name and mode
* Using parameter string $name as file name
* Using parameter string $fmode as file mode for read, write
*/
public function __construct($name, $fmode)(
$this->name = $name;
$this->file_handle = fopen($name, $fmode);
)
/**
* We are closing the file handle
*/
public function __destruct()(
if($this->file_handle)(
fclose($this->file_handle);
)
)
/**
* Reading and printing file's content
*/
public function display()(
echo fread($this->file_handle, filesize($this->name));
)
)
$fu = new FileHandle('./test_doc.txt', 'r');
$fu->display();
?>

Ausgabe:

Die folgende Warnung wird ausgegeben, wenn test_doc.txt nicht erstellt wird.

Vorteile von Destruktoren

  • Destruktoren helfen bei der Freigabe der Speicherzuordnung und stellen so sicher, dass der erforderliche Speicherplatz für neu erstellte Objekte vom Konstruktor zur Verfügung gestellt wird, oder geben Ressourcen für andere Aufgaben frei.
  • Stellt sicher, dass alle Aufgaben effizient ausgeführt werden, da der Bereinigungsprozess ausgeführt wird.
  • In Fällen, in denen viele Variablen und Strukturen zugeordnet sind, können durch die Verwendung von Destruktoren Speicherverluste verhindert werden, indem interne Ressourcen freigegeben werden.
  • Es werden sowohl statische als auch lokale Variablen berücksichtigt.

Einschränkungen von Destruktoren

  • Destruktoren können keine Parameter annehmen und geben auch keinen Rückgabewert zurück (nicht einmal void).
  • Vererbung durch Destruktoren ist nicht zulässig
  • Es ist nicht zwingend erforderlich, dass ein Destruktor statisch ist
  • Es ist nicht möglich, auf die Adresse eines Destruktors zu verweisen
  • Ein Objekt, das zu der Klasse gehört, die den Destruktor enthält, darf kein Gewerkschaftsmitglied sein.
  • Es ist obligatorisch, dass eine Destruktorfunktion öffentlichen Zugriff hat.

Fazit

Wie wir gesehen haben, werden Destruktoren, die das genaue Gegenteil von Konstruktoren sind, verwendet, um ein Objekt zu zerstören, nachdem seine Verwendung abgeschlossen ist, und im Code nicht weiter benötigt. So wird sichergestellt, dass unerwünschte Ressourcen bereinigt werden und Platz für zukünftige Ressourcen bleibt. Dazu deklarieren Sie die Funktion __destruct (), die am Ende des Skripts automatisch von PHP aufgerufen wird.

Empfohlene Artikel

Dies ist eine Anleitung zu Destructor in PHP. Hier diskutieren wir die Arbeitsweise, Vorteile und Grenzen von Destruktor in PHP zusammen mit Beispielen. Sie können sich auch die folgenden Artikel ansehen, um mehr zu erfahren -

  1. Assoziatives Array in PHP
  2. Quadratwurzel in PHP
  3. Funktionen in PHP
  4. Holen Sie sich die IP-Adresse in PHP