ホームページ >バックエンド開発 >PHPチュートリアル >コードを書きましたが、オブジェクト指向の継承を理解する方法がわかりません。
PHP オブジェクト指向の継承
class ParentClass { private $private = 1; public function getPrivate() { echo 'getPrivate() belong to class "' . get_class($this) . '"<br>'; return $this->private; }}class Son extends ParentClass {}$son = new Son();echo 'private=' . $son->getPrivate();
このように出力されます。 出てこない場合、この $private はどうやって公開できると思いますか?
PHP の private は、外部から直接アクセスできない属性やメソッドを指します。つまり、
$ はできません。 Son->private でアクセスできますが、公開できるのは内部パブリック メソッドを通じてのみです。
getPrivate は ParentClass クラスのメソッドです。 もちろん、ParentClass::getPrivate を通じて、ParentClass のプライベート プロパティを出力できます。 #1 と #2 が言ったように、サブクラスは基本のメソッドを継承します。クラス、基本クラスのメソッドはプライベート プロパティを出力できます。
そして、サブクラスは基本クラスのプライベート プロパティを継承できません したがって、投稿者が実際に見たい結果は
echo $son->$private; です
これは出力できません。その後、どのように公開したいですか?これは $private ですか?
PHP のプライベートとは、外部から直接アクセスできない属性またはメソッドを指します。つまり、 $son->private のようにアクセスできず、内部のパブリック メソッドを通じてのみ公開できます。
私が理解できないのは、なぜ getPrivate() メソッドで関数 get_class() を呼び出すと、結果が "ParentClass" ではなく "Son" になるのかということです
getPrivate は、ParentClass クラスのメソッドです。 ParentClass の private プロパティは、ParentClass::getPrivate 属性 private を通じて出力できます
getPrivate() メソッドは「ParentClass」クラスに属しているのに、なぜ getPrivate() メソッドで get_class() が出力されると「 "ParentClass" の代わりに Son"
[ドキュメント内の get_class() メソッドの説明を読んだ後、
<?phpabstract class bar { public function __construct() { var_dump(get_class($this)); var_dump(get_class()); }}class foo extends bar {}new foo;?>が結果を取得した例があります:
string(3) "foo"string(3) "bar"私の例では、基本クラスの "$this" はサブクラスのインスタンスを参照しているようです。 「$this->private」を実行すると、未定義のエラーが報告されるはずです。 】