Section 8 - Access Method
The access method of PHP5 allows restricting access to class members. This is a new feature in PHP5, but it has long been available in many object-oriented languages. Exists. Only with access methods can we develop a reliable object-oriented application and build a reusable object-oriented class library.
Like C++ and Java, PHP has three access methods: public, private and protected . The access method for a class member can be one of them. If you do not specify the access method, the default access method is public. You can also specify an access method for static members and put the access method before the static keyword. (such as public static).
Public members can be accessed without restrictions. Any code outside the class can read and write public properties. You can call a public method from anywhere in the script. In front of PHP In several versions, all methods and properties were public, which made the object look like a neatly structured array.
Private (private) members were only visible inside the class. You can't add a private property to a class. Change or read its value outside the class method. Similarly, only methods in the same class can call a private method. Inherited subclasses cannot access private members in the parent class.
It should be noted that any member of the class and instances of the class can access private members. Look at Example 6.8, the equals method compares two widgets. The == operator compares two objects of the same class, but in this example each Each object instance has a unique ID. The equals method only compares name and price. Note how the equals method accesses the private property of another Widget instance. Both Java and C allow this operation.
Listing 6.8 Private members
<?php class Widget { private $name; private $price; private $id; public function __construct($name, $price) { $this->name = $name; $this->price = floatval($price); $this->id = uniqid(); } //checks if two widgets are the same 检查两个widget是否相同 public function equals($widget) { return(($this->name == $widget->name)AND ($this->price == $widget->price)); } } $w1 = new Widget(Cog, 5.00); $w2 = new Widget(Cog, 5.00); $w3 = new Widget(Gear, 7.00); //TRUE if($w1->equals($w2)) { print("w1 and w2 are the same<br> "); } //FALSE if($w1->equals($w3)) { print("w1 and w3 are the same<br> "); } //FALSE, == includes id in comparison if($w1 == $w2) //不等,因为ID不同 { print("w1 and w2 are the same<br> "); } ?>
<?php class Widget { private $name; private $price; private $id; public function __construct($name, $price) { $this->name = $name; $this->price = floatval($price); $this->id = uniqid(); } //checks if two widgets are the same public function equals($widget) { return(($this->name == $widget->name)AND ($this->price == $widget->price)); } protected function getName() { return($this->name); } } class Thing extends Widget { private $color; public function setColor($color) { $this->color = $color; } public function getColor() { return($this->color); } public function getName() { return(parent::getName()); } } $w1 = new Widget(Cog, 5.00); $w2 = new Thing(Cog, 5.00); $w2->setColor(Yellow); //TRUE (still!) 结果仍然为真 if($w1->equals($w2)) { print("w1 and w2 are the same<br> "); } //print Cog 输出 Cog print($w2->getName()); ?>