目次
ディスカッションへの返信(解決策)
ホームページ バックエンド開発 PHPチュートリアル コードを書きましたが、オブジェクト指向の継承を理解する方法がわかりません。

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

Jun 23, 2016 pm 02:24 PM

この投稿は、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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles