重要な部分を紹介する前に、まず PHP オブジェクト指向アクセス制御について復習しましょう。
プロパティまたはメソッドのアクセス制御は、キーワード public (パブリック)、protected (保護)、または private (プライベート) を先頭に追加することによって実現されます。 public として定義されたクラス メンバーにはどこからでもアクセスできます。保護されたものとして定義されたクラス メンバーは、それ自体、そのサブクラス、および親クラスからアクセスできます。プライベートとして定義されたクラス メンバーには、そのメンバーが定義されているクラスのみがアクセスできます。
クラス属性は、public、protected、private のいずれかとして定義する必要があります。 var で定義されている場合は、パブリックとみなされます。
以下のサンプル コードを参照してください (公式ドキュメント http://php.net/manual/en/lang... より):
<?php /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; 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 = 'self'; public function test() { $other = new self(); $other->a = 'other'; var_dump($other->a); } } $aa = new A(); $aa->test();
上記のコードのように、Aオブジェクトを新規作成し、このインスタンスのプライベート属性 a に値を割り当てます。エラーは報告されませんでした!
説明: 同じクラスのオブジェクトは、同じインスタンスでなくても、互いのプライベート メンバーと保護されたメンバーにアクセスできるためです。これらのオブジェクトの内部実装の詳細がわかっているためです。
以上がPHPインスタンスオブジェクトのプライベートプロパティに直接アクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。