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

Конструктор класса вызывается автоматически всякий раз, когда создаются экземпляры класса и объекты из класса. В PHP ООП конструктор используется для инициализации свойств во время создания объекта. Конструктор выглядит как обычный метод PHP, разница заключается только в том, что он начинается с __ (двух символов подчеркивания).

Конструктор класса PHP может содержать столько аргументов или параметров, сколько необходимо. Также можно определить конструктор вообще без параметров.

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

Чтобы создать экземпляр класса, мы используем ключевое слово new, и в этот момент вызывается конструктор. В PHP родительский конструктор вызывается явно, если определен конструктор производного класса. Если требуется конструктор суперкласса, в производном классе нужен вызов parent::__construct(). Конструктор суперкласса может наследоваться, если производный класс не определяет конструктор сам. Наследуется конструктор так же, как и любой другой метод класса, если в суперклассе он не был объявлен как privat.

В PHP4 и ниже при определении конструктора использовался метод с таким же именем, что и класс (как в C++ и Java). PHP5 ООП для определения конструктора любого класса содержит специальную функцию __construct(). Конструктор может содержать аргументы в соответствии с конкретными требованиями. Все объекты могут иметь встроенную функцию-конструктор, которая инициализирует при создании объекта его свойства. PHP позволяет создать только один конструктор для каждого класса, и мы не можем перегрузить конструктор.

Если существует несколько объявленных конструкторов, PHP будет вызывать первый и игнорировать остальные. Конструктор должен быть объявлен как public и может использоваться вне класса. Если конструктор объявлен как private, он может быть использован только с классом, в котором он определен. В случае если необходимо объявить его как private, нам нужно будет использовать вызов статической функции.

Так как конструктор является магическим методом, он будет иметь отличительную метку магических методов - два подчеркивания в начале. Для определения конструктора мы используем ключевое слово construct:

__construct();             // Конструктор без аргументов.

Пример PHP-конструктора

Давайте предположим, что у нас есть класс PHP Human, и он содержит переменную name. Исходный код будет выглядеть следующим образом:

<?php
    class Human{
                var $name;
}
?>

Теперь мы добавим конструктор в этот класс. Помните, что в ООП PHP конструкторы - это магические методы, следовательно, они начинаются с двух символов подчеркивания и ключевого слова construct:

<?php
    class Human{
                var $name;
    function  __construct($nameofperson){
               $this -> name= $nameofperson;
                            }
}

Создаем объекты этого класса с помощью ключевого слова new:

$firstObject      =  new Human("Joseph");
     $secondObject=  new Human("Taylor");

В этом ООП PHP примере мы создали объекты и инициализировали переменную $name. Первый объект будет хранить в переменной $name значение "Joseph", а второй - "Taylor". Мы присвоили объектам значения во время создания, чтобы избежать путаницы. Если бы для класса Human конструктор не был определен, то объекты создавались бы следующим образом:

$firstObject =  new Human( );
        $secondObject = new Human( );

PHP-конструктор с несколькими аргументами

Мы добавим новую переменную age в класс Human:

<?php
    class Human{
                var $name;
                var $age;
}
?>

Сейчас наш класс содержит две переменные для хранения данных каждого объекта. Name и age представлены переменными $name и $age. Определяем конструктор еще раз, но на этот раз с двумя аргументами, один - чтобы установить экземпляр Name, а второй - age:

<?php
    class Human{
                var $name;
    function  __construct($nameofperson, $ageofperson){
               $this -> name= $nameofperson;
               $this -> age= $ageofperson;
                            }
}
?>
      $firstObject     =  new Human("Joseph", 23);
     $secondObject=  new Human("Taylor", 35);

Мы создали два объекта, и они содержат начальные значения двух переменных-членов. Следует отметить, что согласно основам PHP ООП конструктор нельзя вызвать более одного раза, но мы можем изменять значения переменных-членов.

Поэтому в классе Human мы создадим два метода, один устанавливает возраст, а второй - имя. Конструктор используется, только чтобы задать начальные значения любой переменной. В дальнейшем, если нужно изменить это значение, мы будем использовать эти функции.

Тот же класс с двумя дополнительными методами:

<?php
    class Human{
                var $name;
    function  __construct($nameofperson, $ageofperson){
               $this -> name= $nameofperson;
               $this -> age= $ageofperson;
                            }
     function set_name($newname){
                $this ->name=$newname;
    }
    function set_age($newage){
                $this ->age=$newage;
    }
}
?>

Мы можем вызывать два новых метода, чтобы изменить имя или возраст. Добавим в пример еще два метода, чтобы вывести имя и возраст:

function get_name(){
return $this->name;
}
function get_age(){
return $this->age;
}

Полный пример использования конструктора класса PHP ООП с четырьмя функциями:

<?php
    class Human{
                var $name;
    function  __construct($nameofperson, $ageofperson){
    &nnbsp;          $this -> name= $nameofperson;
               $this -> age= $ageofperson;
                            }
     function set_name($newname){
                $this ->name=$newname;
    }
    function set_age($newage){
                $this ->age=$newage;
    }
    function get_name(){
                return $this->name;
    }
    function get_age(){
                return $this->age;
    }
}
?>

Еще один пример PHP-конструктора

Сначала мы определяем конструктор для класса bookinfo. Когда будут созданы объекты, мы передадим в конструктор значения для соответствующих экземпляров.

Давайте посмотрим, как используется конструктор. Сначала создаем простой класс с одним свойством и одной функцией:

<?php
 class car {
                   public $var name;
                    public function get_carname()
{ echo $this->name; }
               }
 ?>

Это простой класс, который содержит одну переменную данных, название машины, и метод вывода этого названия.

Теперь добавим конструктор, который будет задавать значение name в момент создания объекта. В ООП PHP код конструктора будет выглядеть следующим образом:

function __construct($param){
$this->name=$param;
}
Добавив в наш класс конструктор, мы получим следующий код:
<?php
 class car {
                   public $var name;
                   function  _construct($param){
                   $this->name=$param;
                   }
                    public function get_carname()
{ echo $this->name; }
               }
 ?>

Теперь создаем из класса объект:

$mycar= new car(“Honda”);

Выводим значение данных переменной через вызов метода get_carname():

$mycar->get_carname();

Результат будет следующим:

Honda.

Это простой пример создания конструктора с инициализацией значения членов объекта. Это значение не фиксированное. Мы можем изменить его при необходимости. Тем не менее, это отличный способ инициализации объектов.

Используем конструктор в примере объекта PHP ООП, который мы рассматривали ранее. В классе bookinfo мы добавляем следующий код:

function __construct($param1, $ param2){
$this->price=$param1;
$this->title=$param2;
}

В примере после добавления этого кода инициализируются экземпляры класса, чтобы создать объекты. Тот же функционал достигается с помощью конструктора:

$astrology= new  bookinfo(25, “Up to date Astrology”);
$programming= new bookinfo(36, “Up to date PHP”);
$database= new bookinfo(17, “Up to date DB”);

Теперь объекты созданы и инициализированы с названиями и ценами на момент создания объекта, это достигается с помощью конструктора.

Давайте получим доступ к методам get, чтобы вывести цены и названия книг. Используем те же методы, что и ранее:

$astrology->getBookTitle();
$programming-> getBookTitle();
$database-> getBookTitle();
$astrology->getBookPrice();
$programming-> getBookPrice ();
$database-> getBookPrice ();

Этот PHP-код дает следующий результат:

Up to date astrology
Up to date PHP
Up to date DB
25
36
17

Мы видим, что полученный результат тот же самый, но он достигнут с помощью конструктора.

ООП PHP пример базы данных, в котором используется конструктор класса PHP:

class myDatabase{
    var $userid;
    var $password;
    var $databasename;
public function __construct($Databasename, $Password, $Userid)
{
    $this->userid=$Userid;
    $this->password=$Password;
    $this->databasename=$Databasename;
}
}
$database= new myDatabase(username, password, databasename);

Вадим Дворниковавтор-переводчик статьи «PHP Constructor»