uznay-chto-hochesh.narod.ru

-сайт для интересующихся людей

Учебник - справочник по PHP.

Здесь Вы найдете что хотели

Меню сайта
Главная
Введение
Справочник языка
Возможности РНР
Функции (справочник)
Расширение РНР 4.0
F.A.Q. частые вопросы
Приложения
Алфавитный указатель
Друзья сайта
сделай сайт сам! пособие по html
изучение html и web-дизайна для новичков
Бесплатная отправка смс на все операторы
Реклама
 
Назад Глава 13. Классы и Объекты Вперёд

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

Внимание!

В PHP 3 и PHP 4 конструкторы ведут себя по-разному. Предпочтительна исключительно семантика PHP 4.

Конструкторы это функции класса, которые автоматически вызываются при создании нового экземпляра класса операцией new. В PHP 3 функция становится конструктором, когда она имеет то же имя, что и класс. В PHP 4 функция становится конструктором, когда она имеет то же имя, что и класс, в котором она определена - разница незаметна, но существенна (см. далее).

// Работа с PHP 3 и PHP 4.
class Auto_Cart extends Cart
{
    function Auto_Cart()
    {
        $this->add_item ("10", 1);
    }
}

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

// Работа в PHP 3 и в PHP 4.
class Constructor_Cart extends Cart
{
    function Constructor_Cart($item = "10", $num = 1)
    {
        $this->add_item ($item, $num);
    }
}
 
// Использовать ту же заглушку.

$default_cart = new Constructor_Cart;
 
// Создать новый ...
 
$different_cart = new Constructor_Cart("20", 17);

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

Внимание!

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


class A
{
    function A()
    {
      echo "I am the constructor of A.<br>\n";
    }
}

class B extends A
{
    function C()
    {
        echo "I am a regular <br>\n";
    }
}

// в PHP 3 конструктор не вызывается.
$b = new B;

В PHP 3 никакой конструктор в вышеприведённом примере не вызывается. Правило PHP 3 таково: 'Конструктор это функция с тем же именем, что и класс'. Имя класса - B, а функции с именем B() в классе B нет. Ничего не происходит.

Это исправлено в PHP 4 путём введения нового правила: если класс не имеет конструктора, вызывается конструктор базового класса, если он имеется. В РНР 4 предыдущий пример выведет 'I am the constructor of A.<br>'.

class A
{
    function A()
    {
        echo "I am the constructor of A.<br>\n";
    }

    function B()
    {
        echo "I am a regular function named B in class A.<br>\n";
        echo "I am not a constructor in A.<br>\n";
    }
}

class B extends A
{
    function C()
    {
        echo "I am a regular <br>\n";
    }
}

// Это вызов B() как конструктора.
$b = new B;

В PHP 3 функция B() в классе A станет конструктором в классе B, хотя это никак не предполагается. Правило PHP 3: 'Конструктор это функция с тем же именем, что и класс'. PHP 3 не заботиться о том, определяется ли функция в классе B или наследуется.

Это изменено в PHP 4 путём модификации правила: 'Конструктор это функция с тем же именем, что и класс, в котором она определяется'. Таким образом, в PHP 4 класс B может не иметь собственной функции-конструктора, и будет вызван конструктор базового класса, печатая 'I am the constructor of A.<br>'.

Внимание!

Ни PHP 3, ни PHP 4 не вызывают конструктор базового класса автоматически из конструктора получаемого класса. Вы сами должны поместить вызовы конструкторов в нужных местах.

Примечание: в PHP 3 и PHP 4 нет деструкторов. Вы можете использовать register_shutdown_function() для симуляции большей части работы деструкторов.

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

Назад Оглавление Вперёд
extendsВверх ::

Хостинг от uCoz