ホームページ >バックエンド開発 >PHPチュートリアル >PHP サブクラスで保護された親クラス変数にアクセスするにはどうすればよいですか?
オブジェクト指向プログラミングでは、子クラスは親クラスのプロパティとメソッドを継承します。ただし、子クラス内で親クラスの変数に直接アクセスすると、問題が発生する場合があります。
クラス 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>
質問:
なぜこの行はparent::$bb;をエコーするのですか?致命的なエラーが発生しますか?子クラスの親変数 $bb にアクセスするにはどうすればよいですか?
答え:
$bb はクラス A の保護されたプロパティであり、保護されているため、エラーが発生します。プロパティには、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 中国語 Web サイトの他の関連記事を参照してください。