Before introducing the key parts, let us first review PHP object-oriented access control.
Access control of properties or methods is achieved by adding the keywords public (public), protected (protected) or private (private) in front. Class members defined as public can be accessed from anywhere. Class members defined as protected can be accessed by itself and its subclasses and parent classes. Class members defined as private can only be accessed by the class in which they are defined.
Class attributes must be defined as one of public, protected, and private. If defined with var, it is considered public.
Please see the sample code below (from the official document 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
As shown in the above code, we use a class When the instance object accesses the private or protected member properties of a class, a fatal error will be thrown.
The following is what the title of the article does, access the private properties of the PHP instance object.
According to our normal practice, we usually write a public method and then return this attribute.
public function getPrivate() { return $this->private; }
The fact is that we should do this.
The following It is said that it is only used in special scenarios. I hope you will not mess with it when writing code.
<?php class A { private $a = 'self'; public function test() { $other = new self(); $other->a = 'other'; var_dump($other->a); } } $aa = new A(); $aa->test();
As shown in the above code, we create a new A object and assign a value to the private attribute a of this instance. , no error was reported!
Explanation: Because objects of the same class can access each other's private and protected members even if they are not the same instance. This is because the internal implementation details of these objects are known.
The above is the detailed content of How to directly access private properties of php instance objects. For more information, please follow other related articles on the PHP Chinese website!