ホームページ >バックエンド開発 >PHPチュートリアル >コードを書きましたが、オブジェクト指向の継承を理解する方法がわかりません。

コードを書きましたが、オブジェクト指向の継承を理解する方法がわかりません。

WBOY
WBOYオリジナル
2016-06-23 14:24:33971ブラウズ

この投稿は、chaoxi1991 によって、2013-10-18 16:36:27 に最終編集されました

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();

結果はエラーになるはずだと予想していましたが、エラーは報告されませんでした。
実行結果は以下の通りです:
in class "ParentClass" function getPrivate():"Son"
private=1
$private private 属性が出力される理由を聞きたい

ディスカッションへの返信(解決策)

このように出力されます。 出てこない場合、この $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"

考えてみてください、矛盾は親にあります。 クラス内のメソッド getPrivate() で、"$this" は親クラスとサブクラスのどちらのクラス インスタンスを表しますか?

[ドキュメント内の 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」を実行すると、未定義のエラーが報告されるはずです。 】

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。