php 객체의 메서드(함수) 중에 생성자 메서드가 있는데 이 생성자 메서드의 역할은 각 객체(인스턴스)를 초기화 해주는 역할을 합니다.
<?php
class Entree {
public $name;
public $ingredients = array();
public function hasIngredient($ingredient) {
return in_array($ingredient, $this->ingredients);
}
}
위 Entree class 에는 생성자 메서드가 없습니다.
여기에 추가를 한다면
<?php
class Entree {
public $name;
public $ingredients = array();
public function __construct($name, $ingredients) {
$this->name = $name;
$this->ingredients = $ingredients;
}
public function hasIngredient($ingredient) {
return in_array($ingredient, $this->ingredients);
}
}
위와 같이 생성자 메서드가 추가될 수 있습니다.
생성자 메서드(함수)의 이름은 항상 __construct 로 고정으로 사용합니다.
이렇게 해주면 객체를 생성할때 생성자 메서드를 호출하는 형식을 사용할 수 있습니다.
생성자 메서드를 호출한다고 해서 함수의 결과가 반환되거나 하지는 않습니다. 해당 인스턴스(객체)에 사용할 인수를 전달하고 이 전달된 인수를 해당 객체에서 사용하도록 해 주는 것이라고 이해했습니다.
생성자 메서드가 없는 경우는
$soup = new Entree;
$soup->name = '닭고기 수프';
$soup->ingredients = array('닭고기', '물');
이런식으로 인스턴스(객체)를 생성했습니다.
그런데 생성자 메서드가 있는 class의 경우는 생성자 메서드를 호출하면 필요한 인수를 전달할 수 있습니다.
$soup = new Entree('닭고기 수프', array('닭고기', '물'));
이렇게 생성자 메서드를 호출하는 형식으로 객체를 생성할 수 있습니다.
new 지시자에 의해 Entree class의 생성자 메서드를 괄호() 안의 인수를 전달하여 객체를 생성하는 것 입니다.
이렇게 전달된 인수를
$this->name = $name;
$this->ingredients = $ingredients;
이렇게 $this 에 정의를 해서 지금 현재 객체의 변수로 사용이 되도록 한 것 입니다.