PHP 생성자(Constructor)란?
객체 지향 프로그래밍(OOP)에서 생성자(constructor)는 클래스 내부에 정의된 특별한 메서드로, 객체가 생성되는 순간 자동으로 호출됩니다. 생성자의 주된 목적은 새로 만들어진 객체의 속성을 초기화하는 것입니다.
PHP에서는 __construct라는 이름의 메서드가 생성자 역할을 수행합니다. 이 방식은 PHP 5부터 도입되었으며, 그 이전 버전에서는 클래스와 같은 이름을 가진 메서드가 생성자로 사용되었습니다.
생성자 문법
__construct ([ mixed $args = "" [, $... ]] ) : void
기본 생성자 예제
다음 예제는 객체가 생성되는 순간 생성자가 자동으로 실행됨을 보여줍니다.
<?php
class myclass{
function __construct(){
echo "객체가 초기화되었습니다";
}
}
$obj=new myclass();
?>실행 결과:
객체가 초기화되었습니다
인자를 받는 생성자
생성자에 인자를 전달하면 객체 생성 시점에 클래스 속성(property)의 값을 함께 초기화할 수 있습니다.
<?php
class rectangle{
var $height;
var $width;
function __construct($arg1, $arg2){
$this->height=$arg1;
$this->width=$arg2;
}
function show(){
echo "높이=$this->height 너비=$this->width";
}
}
$obj=new rectangle(10,20);
$obj->show();
?>참고로 위 예제의 var 키워드는 예전 방식이며, 현대 PHP에서는 public, protected, private 같은 접근 제어자를 사용하는 것이 권장됩니다.
실행 결과:
높이=10 너비=20
상속 관계에서의 생성자
부모 클래스에 생성자가 정의되어 있다면, 자식 클래스의 생성자 안에서 parent::__construct()를 호출하여 실행할 수 있습니다. 반면 자식 클래스가 생성자를 정의하지 않았다면 부모 클래스의 생성자를 그대로 물려받아 사용합니다.
<?php
class a{
function __construct(){
echo "부모 클래스 a의 생성자입니다\n";
}
}
class b extends a{
function __construct(){
parent::__construct();
echo "자식 클래스 b의 생성자입니다\n";
}
}
class c extends a {
//
}
$a=new a();
$b=new b();
$c=new c();
?>실행 결과:
부모 클래스 a의 생성자입니다 부모 클래스 a의 생성자입니다 자식 클래스 b의 생성자입니다 부모 클래스 a의 생성자입니다
클래스 b는 자체 생성자 안에서 parent::__construct()를 명시적으로 호출하기 때문에 부모의 메시지가 먼저 출력됩니다. 반면 생성자를 정의하지 않은 클래스 c는 객체 생성 시 부모의 생성자가 그대로 실행됩니다.
소멸자(Destructor)
소멸자(destructor)는 가비지 컬렉터가 특정 객체에 대한 참조가 더 이상 존재하지 않는다고 판단하는 순간 자동으로 호출되는 메서드입니다. PHP에서는 __destruct라는 이름을 사용하며, 스크립트 종료(shutdown) 과정에서도 객체들이 소멸되면서 호출됩니다. 소멸자는 인자를 받지 않으며, 별도의 값을 반환하지도 않습니다.
<?php
class myclass{
function __construct(){
echo "객체가 초기화되었습니다\n";
}
function __destruct(){
echo "객체가 소멸되었습니다\n";
}
}
$obj=new myclass();
?>실행 결과:
객체가 초기화되었습니다 객체가 소멸되었습니다