PHP에서 OOP 상위 클래스 메서드 재정의하기
하위 클래스는 같은 이름의 메서드를 생성하여 상위 클래스의 메서드를 재정의할 수 있습니다. 예제를 통해 살펴보겠습니다. 다음과 같은 상위 클래스가 있다고 가정해 봅시다:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
하위 클래스에서 동일한 이름의 메서드를 만들어 보겠습니다:
<?php
class Student extends User {
public function setName($name) {
}
}
?>
일반적으로 상위 클래스 메서드를 재정의하는 이유는 해당 메서드의 동작을 변경하거나 보완하기 위해서입니다. 이 경우 이름의 길이를 확인하는 기능을 추가해 보겠습니다:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
실제로 재정의된 메서드가 호출되는지 확인해 보겠습니다. 먼저 하위 클래스의 객체를 생성합니다:
<?php
$student = new Student;
?>
이제 올바른 값을 전달하여 메서드를 호출해 보겠습니다:
<?php
$student->setName('john');
?>
이번에는 올바르지 않은 값을 전달하여 메서드를 호출해 보겠습니다. 결과적으로 발생한 예외를 확인할 수 있습니다:
<?php
$student->setName(''); // 오류
?>
User 클래스에서
나이에 대한 getter와 setter를 만드세요.
Employee 클래스에서
나이 setter를 재정의하고,
나이가 18세에서 65세 사이인지
확인하는 기능을 추가하세요.