PHP Velho Oeste 2024

Конструкторы

Конструкторы - это функции в классе, которые автоматически вызываются, когда вы создаёте новый экземпляр класса при помощи ключевого слова new. Функция является конструктором, если она имеет, то же имя, что и класс. Если класс не имеет конструктора, то будет вызван конструктор базового класса, если он существует.

<?php
class Auto_Cart extends Cart {
    function 
Auto_Cart() {
        
$this->add_item("10"1);
    }
}
?>

Здесь определяется класс Auto_Cart, который является классом Cart плюс конструктор, который инициализирует корзину одним товаром с артикулом "10" каждый раз, когда новый объект класса Auto_Cart создаётся при помощи "new". Конструкторы могут получать аргументы и эти аргументы могут быть необязательными, что делает их намного более полезными. Чтобы было возможным всё ещё использовать класс без параметров, все параметры к конструкторам должны быть объявлены необязательными при помощи указания значений по умолчанию.

<?php
class Constructor_Cart extends Cart {
    function 
Constructor_Cart($item "10"$num 1) {
        
$this->add_item ($item$num);
    }
}
 
// Shop the same old boring stuff.
$default_cart = new Constructor_Cart;
 
// Shop for real...
$different_cart = new Constructor_Cart("20"17);
?>

Вы также можете использовать оператор @ для того, чтобы заглушить ошибки, возникающие в конструкторе, например @new.

<?php
class A
{
    function 
A()
    {
        echo 
"Я - конструктора классса A.<br />\n";
    }

    function 
B()
    {
        echo 
"Я обычная функция, названная B в классе A.<br />\n";
        echo 
"Я не являюсь конструктором в классе A.<br />\n";
    }
}

class 
extends A
{
}

// Здесь функция B() вызовется как конструктор
$b = new B;
?>

Функция B() класса A неожиданно станет конструктором в классе B, хотя она никогда не была предназначена для такого использования. PHP 4 всё равно - была ли функция определена в классе B, или она была унаследована.

Предостережение

PHP не вызывает конструктор базового класса автоматически из класса потомка. Вы должны делать это самостоятельно.

Деструкторы - это функции, которые вызываются автоматически, когда объект уничтожается, при помощи функции unset() или просто при выходе за область его видимости. В PHP нет деструкторов. Вы можете использовать функцию register_shutdown_function() для того, чтобы симулировать большинство эффектов деструкторов.

add a note add a note

User Contributed Notes 2 notes

up
0
Anonymous
9 years ago
I only just noticed this page is specifically referring to PHP 4, so I'd suggest changing
"There are no destructors in PHP."
to
"There are no destructors in PHP 4. Support for destructors was added in PHP 5."
up
0
Anonymous
9 years ago
"There are no destructors in PHP. You may use register_shutdown_function() instead to simulate most effects of destructors. "

I thought this was a particularly strange statement, seeing as that I use __construct() en __destruct() the whole time. And surely, from http://php.net/manual/en/language.oop5.decon.php we can read this:

"void __destruct ( void )
PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence. "

And even:
"The destructor will be called even if script execution is stopped using exit(). Calling exit() in a destructor will prevent the remaining shutdown routines from executing."

So PHP definitely supports destructors.
To Top