Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 자식 클래스에서 부모 생성자를 호출하는 방법 완벽 정리

PHP에서 상속 관계에 있을 때 자식 클래스에서 부모 클래스의 생성자를 호출해야 하는 상황은 크게 두 가지 경우로 나눌 수 있습니다.

첫 번째 경우: 자식 클래스가 생성자를 정의한 경우

자식 클래스에서 직접 생성자를 정의하면 부모 클래스의 생성자는 자동으로 실행되지 않습니다. 부모의 생성자를 실행하려면 반드시 자식 클래스의 생성자 내부에서 parent::__construct()를 명시적으로 호출해야 합니다.

예제 코드

<?php
   class grandpa{
      public function __construct(){
         echo "I am in Tutorials Point"."\n";
      }
   }
   class papa extends grandpa{
      public function __construct(){
         parent::__construct();
         echo "I am not in Tutorials Point";
      }
   }
$obj = new papa();
?>

실행 결과

I am in Tutorials Point
I am not in Tutorials Point

설명

위 예제에서 papa 클래스(자식)는 grandpa 클래스(부모)를 상속받으면서 자체 생성자를 가지고 있습니다. 이때 parent::__construct()를 호출했기 때문에 부모 클래스의 생성자가 먼저 실행되고, 그다음 자식 클래스의 코드가 실행됩니다. 만약 parent::__construct() 호출이 없었다면 "I am in Tutorials Point"는 출력되지 않았을 것입니다.

두 번째 경우: 자식 클래스가 생성자를 정의하지 않은 경우

자식 클래스에 생성자가 정의되어 있지 않다면, 일반적인 메서드와 마찬가지로 부모 클래스의 생성자가 상속됩니다. 단, 부모의 생성자가 private으로 선언된 경우에는 상속되지 않습니다.

예제 코드

<?php
   class grandpa{
      public function __construct(){
         echo "I am in Tutorials point";
      }
   }
   class papa extends grandpa{
   }
   $obj = new papa();
?>

실행 결과

I am in Tutorials point

설명

이번에는 자식 클래스인 papa에 어떠한 생성자도 선언하지 않았습니다. 따라서 객체를 생성할 때 부모 클래스 grandpa의 생성자가 암묵적으로(implicitly) 호출되어 결과가 출력됩니다.

정리

핵심을 요약하면 다음과 같습니다.

  • 자식 클래스에 생성자가 있는 경우: 부모 생성자가 자동으로 호출되지 않으므로 반드시 parent::__construct()를 직접 호출해야 합니다.
  • 자식 클래스에 생성자가 없는 경우: 부모의 생성자(private 제외)가 그대로 상속되어 자동으로 실행됩니다.