[php] 클래스상속
클래스상속(extends)
클래스를 상속하려면?
기존에 이미 작성된 클래스를 상속(class inheritance)받으면 이미 작성된 메쏘드와 멤버변수를 그대로 이어받게 됩니다.
상속받은 특성에 덧붙여 새로운 특성을 추가하는 방법으로 새로운 클래스를 정의하게 됩니다. 이와 같이 기존의 클래스로부터 특성을 이어받는 것을 상속이라고 합니다.
이 때 확장된 클래스를 정의하기 위해 "extends"라는 키워드를 사용합니다.
부모클래스 & 자식클래스에 관련된 용어
기존의 클래스와 확장된 클래스를 나타내는 용어는 객체지향언어마다 다양하게 사용되고 있습니다.
그러나 어떤 용어를 사용하더라도 같은 의미로 사용되고 있다고 이해하시면 됩니다.
기존의 클래스 | 확장된 클래스 | ||
---|---|---|---|
용어 | 영문 | 용어 | 영문 |
기반클래스 | base class | 파생클래스 | derived class |
수퍼클래스 | super class | 서브클래스 | sub class |
부모클래스 | parent class | 자식클래스 | child class |
클래스 상속 예제
class Cart {
public $items; // Items in our shopping cart
// Add $num articles of $artnr to the cart
public function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
// Take $num articles of $artnr out of the cart
public function remove_item ($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
class Named_Cart extends Cart {
public $owner;
public function set_owner ($name) {
$this->owner = $name;
}
}
클래스 Named_Cart는 클래스 Cart의 모든 변수와 함수를 그대로 상속받게 되며, 새로운 멤버인 변수 $owner과 함수 set_owner()를 추가하여 정의합니다.
앞서 배운 new 연산자를 이용하여 클래스 Named_Cart의 객체를 생성한 후 장바구니 주인을 지정하거나 주인이 누구인지 확인할 수 있습니다.
아울러 부모클래스 Cart에 있는 장바구니 관련 함수를 그대로 사용할 수 있습니다.
$ncart = new Named_Cart; // Create a named cart
$ncart->set_owner ("kris"); // Name that cart
$ncart->add_item ("10", 1); // (inherited functionality from cart)
단일 상속
PHP는 다중 상속(multiple inheritance)를 지원하지 않으며, 오로지 단일 상속만 지원합니다.