final 키워드
final 키워드 (Final Keyword)
이 페이지에서는 메서드, 프로퍼티, 상수, 그리고 클래스 자체의 재정의를 막는 final 키워드의 사용법을 알아봐요.
본문
final 키워드는 정의 앞에 final을 붙여서 자식 클래스가 메서드, 프로퍼티, 상수를 오버라이드하지 못하게 막아줍니다. 클래스 자체가 final로 정의되면 그 클래스는 상속될 수 없어요.
예제 #1 final 메서드 예제
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() called\n";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() called\n";
}
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>
예제 #2 final 클래스 예제
<?php
final class BaseClass {
public function test() {
echo "BaseClass::test() called\n";
}
// As the class is already final, the final keyword is redundant
final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}
class ChildClass extends BaseClass {
}
// Results in Fatal error: Class ChildClass may not inherit from final class (BaseClass)
?>
예제 #3 PHP 8.4.0부터의 final 프로퍼티 예제
<?php
class BaseClass {
final protected string $test;
}
class ChildClass extends BaseClass {
public string $test;
}
// Results in Fatal error: Cannot override final property BaseClass::$test
?>
예제 #4 PHP 8.1.0부터의 final 상수 예제
<?php
class Foo
{
final public const X = "foo";
}
class Bar extends Foo
{
public const X = "bar";
}
// Fatal error: Bar::X cannot override final constant Foo::X
?>
Note:
PHP 8.0.0부터 private 메서드는 생성자(constructor) 를 제외하고는
final로 선언할 수 없어요.
Note:
private(set)로 선언된 프로퍼티는 암시적으로final이 됩니다.