다음 코드의 실행 결과는?

과목: PHP

문제 번호: 3006

medium
다음 코드의 실행 결과는?
<?php
class Fruit {
    public $name;
    protected function intro() {
        echo "This is a fruit";
    }
}

class Apple extends Fruit {
    public function showInfo() {
        $this->intro(); // 라인 A
    }
}

$apple = new Apple();
$apple->showInfo();  // 라인 B
$apple->intro();     // 라인 C
?>
A. "This is a fruit" 출력 후 정상 종료
B. "This is a fruit" 출력 후 오류 발생
C. 처음부터 오류 발생
D. 아무것도 출력되지 않음

정답: B



이 코드는 protected 메서드의 접근 규칙을 보여주는 중요한 예제입니다.

단계별 실행 분석:

1. 라인 B ($apple->showInfo()) - 정상 실행
showInfo()public 메서드이므로 외부에서 호출 가능

2. 라인 A ($this->intro()) - 정상 실행
intro()protected 메서드지만 상속받은 클래스 내부에서 호출
⦁ Apple 클래스가 Fruit를 상속받았으므로 접근 가능
⦁ "This is a fruit" 출력

3. 라인 C ($apple->intro()) - 오류 발생
intro()protected 메서드이므로 클래스 외부에서 직접 호출 불가
⦁ Fatal Error 발생

핵심 개념:
protected 멤버는 상속받은 클래스 내부에서는 접근 가능
⦁ 하지만 클래스 외부에서는 직접 접근 불가

💡 학습 팁

이 문제를 포함한 PHP 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.