PHP 클래스에서 오버라이드는(Override) 부모 클래스의 메소드를 재정의 하는 것을 뜻합니다. 재정의시에는 메소드명과 인자가 동일해야 합니다. 접근제어자는 같거나 더 많이 허용하는쪽으로 지정할 수 있습니다.
메소드명이 같은데 인자가 다르면 에러가 발생합니다. 다른 객체 지향언어는 메소드 오버로딩(overloading) 이라고 해서 메소드의 이름은 같고, 인자가 다른 메소드를 정의하여 주어지는 인자에 따라 다른 메소드가 호출되도록 할 수 있지만, PHP 는 오버로딩은 지원하지 않습니다.(PHP에도 오버로딩이라는 기능이 있습니다. 하지만, 이 기능은 일반적인 객체 지향 언어에서의 오버로딩과는 다른 기능 입니다.)
이 오버라이딩 규칙은 생성자(__constructor)에도 동일하게 적용됩니다.
class Vehicle {
public $name = "Vehicle";
public function getName() {
return $this->name;
}
public function drive() {
return "Vehicle drive";
}
}
class Car extends Vehicle {
public $name = "Car";
public function getName() {
return parent::getName() . " : " . $this->name;
}
public function drive() {
return parent::drive() . " : " . "Car drive";
}
}
$veh = new Vehicle();
$car = new Car();
echo($veh->getName());
echo("<br />\n");
echo($veh->drive());
echo("<br />\n");
echo($car->getName());
echo("<br />\n");
echo($car->drive());
결과)
Vehicle
Vehicle drive
Car : Car
Vehicle drive : Car drive
오라라이딩된 메소드 또는 생성자에서 parent 키워드를 사용해서 부모의 메소드, 생성자를 호출할 수 있습니다. 이때 사용되는 더블콜론(::) 연산자를 범위 결정 연산자 (Scope resolution operator)라고 부릅니다.
parent::drive();
자식 클래스에서 부모 클래스의 멤버변수와 동일한 이름의 멤버변수를 만들면 부모의 변수는 가려져서 접근할 수 없게 됩니다.
parent::$name 은 정적(static) 멤버일 경우에만 사용할 수 있습니다. parent::getName(); 또한 가려진 부모의 멤버변수에 접근할 수 없습니다. $this는 항상 현재 객체를 가리키기 때문입니다.
반응형
'프로그래밍 > PHP' 카테고리의 다른 글
PHP 마이그레이션시 자주 나오는 DEPRECATED 함수 대체하기 (0) | 2018.04.17 |
---|---|
Microsoft Webmatrix 설치하기 (0) | 2018.04.17 |
PHP 클래스 상속(Inheritance) (0) | 2018.04.09 |
PHP 클래스(class) 기본 사용하기 (0) | 2018.04.09 |
자동등록방지 구글 reCAPTCHA(리캡챠) 설치하기 - PHP (0) | 2018.04.04 |