Вход Регистрация

Конструктор класса в PHP

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


class MyConstruct {
	private $_work;

	public function __construct() {
		echo 'Конструктор класса ';
		$this->_work = 'MyConstruct';
	}

}

$_Class_MyConstruct = new MyConstruct();
echo '<pre>';
print_r($_Class_MyConstruct);
echo '</pre>';

Результат:


Конструктор класса
MyConstruct Object
(
    [_work:MyConstruct:private] => MyConstruct
)

Важно помнить, что вызов конструктора класса производиться автоматически во время выполнения оператора "new". Это позволяет разработчику быть уверенным, что члены класса получат корректную инициализацию. Создавать специальный метод для инициализации объекта считается дурным тоном - разработчик может забыть его вызвать.

Во многих языках программирования явный вызов конструктора вообще не допускается, поскольку это противоречит принципу инкапсуляции, однако в PHP конструктор можно вызвать не только в самом классе, но и из внешнего кода. Пример:


class MyConstruct {

	public function __construct() {
		echo '<div>Конструктор класса "MyConstruct"</div>';
	}

	public function by_construct() {
		'<div>'. $this->__construct() .'</div>';
	}

}

$_Class_MyConstruct = new MyConstruct();
$_Class_MyConstruct->__construct();
$_Class_MyConstruct->by_construct();

Результат:


Конструктор класса "MyConstruct"
Конструктор класса "MyConstruct"
Конструктор класса "MyConstruct"

Первый раз конструктор был вызван неявно при создании объекта "$_Class_MyConstruct", во второй раз - явно, в третий раз вызов происходит из метода "by_construct()". Следует избегать манипулирования конструктором напрямую. Если одни и те же действия могут выполняться как конструктором, так и каким-либо другим методом, предпочтительнее определить отдельный метод для выполнения этого набора действий.

Предположим, у нас имеется класс с описанием точки, при объявлении объекта которого два его члена: $_X и $_Y, определяющие координаты точки по оси абсцисс и ординат, получают нулевые значения. Пусть класс также содержит метод "by_nulled()", позволяющий разработчику вернуть координатам исходное нулевое значение.

Правильным подходом будет установка нулевого значения в методе "by_nulled()" и вызов этого метода из конструктора, а не обнуление переменных в конструкторе и вызов его в методе "by_nulled()".


class ByConstructor {

	private $_X, $_Y;

	public function __construct() {
		$this->by_nulled();
	}

	public function by_nulled() {
		$this->_X = 0;
		$this->_Y = 0;
	}

}

Назначение конструктора заключается в автоматической инициализации объекта при его создании, и его не следует использовать больше ни для каких целей - это лишь запутает и усложнит код. Конструктор может использовать методы класса в своей работе, вызывать конструктор в работе других методов крайне нежелательно.


Комментировать

captcha

  #1 / Гость
26 марта 2013 / Ответить  

Спасибо за статью.

  #2 / Гость
11 ноября 2013 / Ответить  

В последнем примере кода объявление конструктора исправь с finction на function.

  #3 / codomaza
12 ноября 2013 / Ответить  

Спасибо! Исправили.

Вход

Зарегистрируйтесь, если нет учетной записи

Напомнить пароль
Создание учётной записи
Напомнить пароль
Войти в личный кабинет