Конструктор 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);