Úvod do Destructor v PHP

PHP zaviedlo metódu destruktora, ktorá je rovnaká ako v iných jazykoch OOP, ako je C ++. Ako už názov napovedá, deštruktor je význam objektu, keď je zničený alebo keď je skript prerušený alebo zastavený. Konštruktory sú členmi špeciálnych funkcií pre novo vytvorené inštancie objektov. Destruktory sú presným opakom konštruktorov a volajú sa, keď sa vytvorená inštancia odstráni z pamäte.

Konštruktor sa volá funkciou __construct (), zatiaľ čo deštruktor sa volá pomocou funkcie __destruct (), ktorú PHP automaticky volá v dolnej časti skriptu. Ak v podstate nezostane žiadny odkaz na objekt v akomkoľvek poradí, automaticky sa zavolá deštruktor.

Základná syntax na volanie deštruktora: Funkcia __destruct (),

syntaxe:

__destruct ( void ) : void

Aby bolo možné volať každý deštruktor, musí existovať konštruktor pred ním, ako je uvedené nižšie:

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

Práca Destructor v PHP

Destruktor je v zásade spravovaný zberateľom odpadu, ktorý vyčistí predmet, keď už nie je potrebný. Na rozdiel od konštruktora nemôže vziať do úvahy žiadne argumenty.

Táto metóda sa používa aj na čistenie zdrojov a uvoľnenie pamäte na ďalšie uloženie. Preťaženie nie je možné vykonať pomocou deštruktorov a iba jeden deštruktor môže existovať v rovnakej triede. Ďalšou jedinečnou vlastnosťou je, že aj keď skript zastavil jeho vykonávanie pomocou príkazu exit (), deštruktor sa bude stále volať. Tento výstup () neumožňuje ukončenie metód vypínania zvyšku.

Príklady Destructor v PHP

Vezmime si niekoľko príkladov, aby sme lepšie pochopili destruktor:

Príklad č. 1

Toto je jednoduchý príklad, kde vytvárame základnú konštruktorovú funkciu a potom ju ničíme zavolaním funkcie destruktora.

kód:

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

Výkon:

Príklad č. 2

V tomto príklade používame v konštruktore dve premenné; meno a priezvisko zamestnanca a potom ničíme objekt Zamestnanec tesne pred ukončením kódu PHP volaním deštruktora.

kód:

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

Výkon:

Príklad č. 3

V tomto príklade uvidíme, ako zaobchádzať so súborom test_doc.txt, ktorý je nevyhnutným textovým dokumentom, ktorý má byť prítomný v rovnakom pracovnom adresári ako hlavný súbor. Nezabudnite zahrnúť nejaký text do súboru test_doc.txt, ktorý je potrebné zobraziť ako súčasť kódu.

fopen je vstavaná funkcia používaná na otváranie súboru a fread je funkcia používaná na čítanie obsahu súboru. Tu bude volaný deštruktor, aby zavrel / zničil filehandle.

kód:

<_?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;
?>

Výkon:

Ako je uvedené v kóde, ak zrušíme funkciu gc_collect_cycles () v strede skriptu, dostaneme výstup ako je uvedené nižšie:

Príklad č. 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();
?>

Výkon:

Ak sa nevytvorí test_doc.txt, zobrazí sa nasledujúce upozornenie.

Výhody Destruktorov

  • Destruktory pomáhajú pri uvoľňovaní alokácie pamäte, čím zaisťujú, že konštruktér má k dispozícii požadovaný priestor pre novo vytvorené objekty alebo uvoľňuje zdroje pre akékoľvek iné úlohy.
  • Zabezpečuje, aby všetky úlohy fungovali efektívne, pretože sa stará o proces vyčistenia.
  • V prípadoch, keď je pridelených veľa premenných a štruktúr, použitie deštruktorov pomôže zabrániť úniku pamäte uvoľnením vnútorných zdrojov.
  • Postará sa o statické aj miestne premenné.

Obmedzenia ničiteľov

  • Ničiče nemôžu mať žiadne parametre a tiež nedávajú žiadnu návratnú hodnotu (dokonca ani neplatnú).
  • Dedičstvo nie je dovolené prostredníctvom deštruktorov
  • Nie je povinné, aby bol deštruktor statický
  • Nie je možné odkazovať na adresu deštruktora
  • Objekt, ktorý patrí do triedy obsahujúcej deštruktor, nie je dovolené byť členom únie.
  • Je nevyhnutné, aby funkcia deštruktora mala verejný prístup.

záver

Ako sme videli, deštruktory, ktoré sú presnou inverziou konštruktorov, sa používajú na zničenie objektu po jeho použití a už sa v kóde nevyžadujú. Tým sa zabezpečí, že vyčistí nežiaduce zdroje, čím sa poskytne priestor pre budúce zdroje. To sa deje deklarovaním funkcie __destruct (), ktorú PHP automaticky zavolá na konci skriptu.

Odporúčané články

Toto je príručka pre Destructor v PHP. Tu diskutujeme fungovanie, výhody a obmedzenia deštruktora v PHP spolu s príkladmi. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Asociatívne pole v PHP
  2. Štvorcový koreň v PHP
  3. Funkcie v PHP
  4. Získajte IP adresu v PHP

Kategórie: