public: public type
In the subclass, you can call the public type method or attribute through self::var. You can call the method in the parent class through parent::method.
In an instance, you can call public type methods or properties through $obj->var
protected: protected type
In subclasses, you can use self::var to call protected type methods or attributes. You can use parent::method to call methods in parent classes
Methods or properties of protected types cannot be called through $obj->var in an instance
private: private type
The attributes or methods of this type can only be used in this class. Private type attributes and methods cannot be called in instances of this class, subclasses, or instances of subclasses
2.The difference between self and parent
a). These two objects are commonly used in subclasses. The main difference between them is that self can call public or protected properties in the parent class, but parent cannot call
b).self:: It represents the static members (methods and properties) of the current class. Unlike $this, $this refers to the current object
Attached code:
<?php /** * parent 只能调用父类中的公有或受保护的方法,不能调用父类中的属性 * self 可以调用父类中除私有类型的方法和属性外的所有数据 */ class User{ public $name; private $passwd; protected $email; public function __construct(){ //print __CLASS__." "; $this->name= 'simple'; $this->passwd='123456'; $this->email = 'bjbs_270@163.com'; } public function show(){ print "good "; } public function inUserClassPublic() { print __CLASS__.'::'.__FUNCTION__." "; } protected function inUserClassProtected(){ print __CLASS__.'::'.__FUNCTION__." "; } private function inUserClassPrivate(){ print __CLASS__.'::'.__FUNCTION__." "; } } class simpleUser extends User { public function __construct(){ //print __CLASS__." "; parent::__construct(); } public function show(){ print $this->name."//public "; print $this->passwd."//private "; print $this->email."//protected "; } public function inSimpleUserClassPublic() { print __CLASS__.'::'.__FUNCTION__." "; } protected function inSimpleUserClassProtected(){ print __CLASS__.'::'.__FUNCTION__." "; } private function inSimpleUserClassPrivate() { print __CLASS__.'::'.__FUNCTION__." "; } } class adminUser extends simpleUser { protected $admin_user; public function __construct(){ //print __CLASS__." "; parent::__construct(); } public function inAdminUserClassPublic(){ print __CLASS__.'::'.__FUNCTION__." "; } protected function inAdminUserClassProtected(){ print __CLASS__.'::'.__FUNCTION__." "; } private function inAdminUserClassPrivate(){ print __CLASS__.'::'.__FUNCTION__." "; } } class administrator extends adminUser { public function __construct(){ parent::__construct(); } } /** * 在类的实例中 只有公有属性和方法才可以通过实例化来调用 */ $s = new administrator(); print '-------------------'; $s->show(); ?>