Увод у Деструцтор у ПХП-у

ПХП је увео методу деструктора исти као онај који постоји у другим ООП језицима као што је Ц ++. Као што име каже, деструктор је значење објекта када је уништен или када је скрипта прекинута или заустављена. Конструктори су чланови посебних функција за новоосноване инстанце објекта. Деструктори су потпуно супротни конструкторима и називају се када се створена инстанца избрише из меморије.

Конструктор се зове функцијом __цонструцт (), док се деструктор назива функцијом __деструцт () коју ПХП аутоматски позива на дну скрипте. Када у основи ниједна референца не остави неког објекта било којим редоследом, аутоматски се позива деструктор.

Основна синтакса за позивање деструктора: Функција __деструцт (),

Синтакса:

__destruct ( void ) : void

Да би се сваки деструктор могао позвати, мора бити конструктор прије њега као што је приказано у наставку:

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

Рад Деструктора у ПХП-у

Деструктором у основи управља сакупљач смећа који чисти предмет када му више није потребан. Не може узети никакве аргументе као свој улаз за разлику од конструктора.

Ова метода се такође користи за чишћење ресурса и за ослобађање меморије за смјештај више. Преоптерећење се не може извести с деструкторима и само један деструктор може постојати у истој класи. Још једна његова јединствена карактеристика је да ће, чак и ако је скрипта зауставила извршење помоћу наредбе екит (), деструктор и даље бити позван. Овај излаз () неће допустити да се методе гашења остатка од престанка рада.

Примери Деструктора у ПХП-у

Узмимо неколико примера да бисмо деструктор боље разумели:

Пример # 1

Ово је једноставан пример где стварамо основну функцију конструктора, а затим је уништавамо позивајући функцију деструктора.

Шифра:

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

Излаз:

Пример бр. 2

За овај пример користимо две варијабле у конструктору; име и презиме запосленог, а затим уништавамо објект Запослени непосредно пре завршетка ПХП кода позивањем деструктора.

Шифра:

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

Излаз:

Пример бр. 3

У овом примеру ћемо видети како поступати са датотеком тест_доц.ткт која је предуслов за текстуални документ да би био присутан у истој радној мапи као и главна датотека. Обавезно укључите неки текст у тест_доц.ткт који треба да буде приказан као део кода.

фопен је уграђена функција која се користи за отварање датотеке, а фреад је функција која се користи за читање садржаја датотеке. Овде ће бити позван деструктор да затвори / уништи датотеку.

Шифра:

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

Излаз:

Као што је поменуто у коду, ако коментирамо функцију гц_цоллецт_цицлес () у средини скрипте, добићемо излаз на следећи начин:

Пример бр. 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();
?>

Излаз:

Следеће упозорење се баца ако тест_доц.ткт није креиран.

Предности Деструктора

  • Деструктори помажу у ослобађању расподјеле меморије чиме конструктор осигурава да је потребан простор за ново креиране објекте или да ослобађа ресурсе за било који други задатак.
  • Осигурава да сви задаци буду ефикасни јер се води рачуна о процесу чишћења.
  • У случајевима када је додељено много променљивих и структура, деструктори ће помоћи у спречавању цурења меморије ослобађањем унутрашњих ресурса.
  • Она се брине и за статичке и за локалне променљиве.

Ограничења Деструктора

  • Деструктори не могу поднијети ниједан параметар, а такођер не дају повратну вриједност (чак ни неисправну).
  • Наслеђивање није дозвољено путем деструктора
  • Није обавезно да деструктор буде статичан
  • Позивање на адресу деструктора није могуће
  • Објекат који припада класи која садржи деструктор није дозвољен као члан синдиката.
  • Обавезно је да функција деструктора мора имати приступ јавности.

Закључак

Као што смо видели, деструктори који су тачно обрнути конструктори користе се за уништавање објекта након што се његова употреба изврши и није потребно даље у шифри. На тај начин осигурава се да очисти нежељене ресурсе, омогућавајући простор будућим ресурсима. То се постиже декларацијом функције __деструцт () коју ће ПХП аутоматски позвати на крају скрипте.

Препоручени чланци

Ово је водич за Деструцтор у ПХП-у. Овде смо расправљали о раду, предностима и ограничењима деструктора у ПХП-у заједно са примерима. Такође можете погледати следеће чланке да бисте сазнали више -

  1. Асоцијативни низ у ПХП-у
  2. Скуаре Роот у ПХП-у
  3. Функције у ПХП-у
  4. Преузмите ИП адресу у ПХП-у

Категорија: