마지막 키워드는 객체 지향 프로그래밍 개념과 관련된 PHP5에서 도입되었습니다.
그러나 마지막으로 넘어가기 전에 상속 개념을 잘 이해하고 있는지 확인해야 합니다. 상속에서는 다른 클래스에서 클래스를 상속할 수 있습니다. 또한 원래 제공된 동작을 대체하기 위해 상속된 클래스의 함수를 재정의할 수 있습니다. 어떤 경우에는 클래스가 상속되지 않도록 해야 하거나 함수가 재정의되는 것을 방지해야 할 수도 있습니다. 이것은 final 키워드로 클래스와 함수에 접두사를 붙임으로써 달성할 수 있습니다. 이는 본질적으로 누군가가 최종 클래스를 확장하거나 최종 함수를 재정의하려고 시도하는 경우 PHP에서 오류를 생성하게 합니다.
참고:
메서드와 클래스에는 final 키워드만 사용할 수 있습니다.
아래의 예시를 통해 개념을 보여드리겠습니다.
예:
상위 클래스 함수를 재정의할 수 없습니다.
<?php class BaseClass{ final function calculate($val1,$val2){ $sum = $val1+$val2; echo "Sum of given no=".$sum; } } class ChildClass extends BaseClass{ function calculate($x,$y){ $mult=$val1*$val2; echo "Multiplication of given no=".$mult; } } $obj= new ChildClass(); $obj->show(10,10); ?>
출력:
PHP Fatal error: Cannot override final method BaseClass::calculate()
설명:
위의 예에서 부모 클래스인 BaseClass 클래스. 계산 방법이 최종으로 표시되는 경우. 이는 자식 클래스에서 show 메서드를 재정의할 수 없음을 의미합니다. 오류를 식별하려면 ChildClass가 최종 메서드를 정의하려고 하는 표시()를 표시합니다. 이것은 치명적인 오류를 생성합니다. 이는 상위 클래스의 최종 메소드가 하위 클래스에서 정의될 수 없음을 의미합니다.
예:
수업 전 "Final" 키워드 활용
<?php final Class BaseClass{ function printData($val1,$val2){ $add=$val1+$val2; echo "Sum of given no=".$s; } } class Child extends BaseClass{ function printData($val1,$val2){ $m=$val1*$val2; echo "Multiplication of given no=".$m; } } $obj= new Child(); $obj->printData(20,20); ?>
출력:
PHP Fatal error: Class Child may not inherit from final class (BaseClass)
설명:
위의 예제에서 BaseClass 클래스는 최종으로 정의하므로 결과적으로 이 클래스를 확장할 수 없습니다. Child 클래스가 BaseClass에서 확장을 시도할 때(Child가 BaseClass의 자식 클래스임을 의미함). 이 상황에서 PHP는 "Class Child는 최종 클래스(BaseClass)에서 상속되지 않을 수 있습니다"라는 오류 메시지를 표시합니다. 이는 BaseClass의 자식 클래스 생성을 허용하지 않는다는 것을 의미합니다.