ホームページ > バックエンド開発 > PHPチュートリアル > PHPインスタンスオブジェクトのプライベートプロパティに直接アクセスする方法

PHPインスタンスオブジェクトのプライベートプロパティに直接アクセスする方法

藏色散人
リリース: 2023-04-07 19:42:01
転載
2701 人が閲覧しました

重要な部分を紹介する前に、まず PHP オブジェクト指向アクセス制御について復習しましょう。

プロパティまたはメソッドのアクセス制御は、キーワード public (パブリック)、protected (保護)、または private (プライベート) を先頭に追加することによって実現されます。 public として定義されたクラス メンバーにはどこからでもアクセスできます。保護されたものとして定義されたクラス メンバーは、それ自体、そのサブクラス、および親クラスからアクセスできます。プライベートとして定義されたクラス メンバーには、そのメンバーが定義されているクラスのみがアクセスできます。

クラス属性は、public、protected、private のいずれかとして定義する必要があります。 var で定義されている場合は、パブリックとみなされます。

以下のサンプル コードを参照してください (公式ドキュメント http://php.net/manual/en/lang... より):

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public $public = &#39;Public&#39;;
    protected $protected = &#39;Protected&#39;;
    private $private = &#39;Private&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
ログイン後にコピー

上記のコードに示されているように、私たちは使用しますクラス インスタンス オブジェクトがクラスのプライベート メンバー プロパティまたは保護されたメンバー プロパティにアクセスすると、致命的なエラーがスローされます。

次は、記事のタイトルの内容です。PHP インスタンス オブジェクトのプライベート プロパティにアクセスします。 .

通常の慣行によれば、通常、パブリック メソッドを作成してこの属性を返します。

public function getPrivate()
{
    return $this->private;
}
ログイン後にコピー

実際には、これを行う必要があります。

以下、特殊な場面でのみ使用されるとのことなので、コードを書く際にはいじらないようにお願いします

<?php
class A {
    private $a = &#39;self&#39;;
    public function test() {
        $other = new self();
        $other->a = &#39;other&#39;;
        var_dump($other->a);
    }
}
$aa = new A();
$aa->test();
ログイン後にコピー

上記のコードのように、Aオブジェクトを新規作成し、このインスタンスのプライベート属性 a に値を割り当てます。エラーは報告されませんでした!

説明: 同じクラスのオブジェクトは、同じインスタンスでなくても、互いのプライベート メンバーと保護されたメンバーにアクセスできるためです。これらのオブジェクトの内部実装の詳細がわかっているためです。

以上がPHPインスタンスオブジェクトのプライベートプロパティに直接アクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート