객체 지향 프로그래밍에서 하위 클래스는 상위 클래스의 속성과 메서드를 상속합니다. 그러나 하위 클래스 내에서 상위 클래스 변수에 직접 액세스하면 문제가 발생할 수 있습니다.
클래스 B가 클래스 A를 확장하는 다음 코드 조각을 고려하세요.
<code class="php">class A { private $aa; protected $bb = 'parent bb'; function __construct($arg) {} private function parentmethod($arg2) {} } class B extends A { function __construct($arg) { parent::__construct($arg); } function childfunction() { echo parent::$bb; //Fatal error: Undefined class constant 'bb' } } $test = new B($some); $test->childfunction();</code>
질문:
왜 이 줄은 echo parent::$bb; 치명적인 오류가 발생합니까? 하위 클래스의 상위 변수 $bb에 어떻게 액세스할 수 있나요?
답변:
$bb가 클래스 A의 protected 속성이고 protected이기 때문에 오류가 발생합니다. 속성은 parent:: 구문을 사용하여 클래스 또는 하위 클래스 외부에서 직접 액세스할 수 없습니다. 대신 다음 구문을 사용하여 $bb에 액세스할 수 있습니다.
<code class="php">echo $this->bb;</code>
설명:
$this 키워드는 현재 개체를 참조합니다. $bb는 클래스 B에 의해 상속되어 현재 객체의 일부가 되므로 $this를 사용하여 액세스할 수 있습니다. 이 구문은 상속된 변수가 하위 클래스의 속성인 것처럼 효과적으로 액세스합니다.
parent::
parent:: 구문은 다음과 같이 사용됩니다. 하위 클래스 내에서 상위 클래스의 메서드나 속성에 액세스합니다. 일반적으로 상위 클래스의 메서드를 재정의하거나 여기에 추가 기능을 추가하려는 경우에 사용됩니다.
예를 들어 다음 코드를 고려하세요.
<code class="php">class Airplane { private $pilot; public function __construct( $pilot ) { $this->pilot = $pilot; } } class Bomber extends Airplane { private $navigator; public function __construct( $pilot, $navigator ) { $this->navigator = $navigator; parent::__construct( $pilot ); // Calls the parent constructor } }</code>
이 경우 Bomber 클래스의 __construct() 메서드는 부모의 __construct() 메서드를 재정의하지만 여전히 이를 사용하여 파일럿 속성을 초기화합니다.
위 내용은 PHP 하위 클래스에서 보호된 상위 클래스 변수에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!