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

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

藏色散人
藏色散人転載
2019-11-14 14:19:172635ブラウズ

重要な部分を紹介する前に、まず 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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。