Maison  >  Article  >  développement back-end  >  Exemples détaillés des différences entre les trois modes de contrôle d'accès de PHP

Exemples détaillés des différences entre les trois modes de contrôle d'accès de PHP

伊谢尔伦
伊谢尔伦original
2017-07-03 10:04:391447parcourir

public : type public

Dans une sous-classe, vous pouvez appeler la méthode publique ou attribute via self::var, parent::method pour appeler la méthode de la classe parent

Dans l'instance, vous pouvez appeler la méthode ou l'attribut de type public via $obj->var

protected : Type protégé

Peut être appelé dans la sous-classe via la méthode ou l'attribut protégé self::var, parent::method appelle la méthode de la classe parent

Dans ce cas, vous ne pouvez pas appeler la méthode ou l'attribut de type protégé via $obj->var

private : type privé

Les attributs ou méthodes de ce type ne peuvent être utilisés que dans cette classe. Les attributs et méthodes de type privé ne peuvent pas être appelés dans les instances de cette classe, de ces sous-classes ou de ces instances. des sous-classes


2. La différence entre soi et parent
a). Leur principale différence est que self peut appeler des propriétés publiques ou protégées dans la classe parent, mais parent ne peut pas appeler

b).self :: Il représente le membre statique de la classe actuelle ( Méthodes et propriétés) Contrairement à $this, $this fait référence à l'objet actuel

Le code est le suivant :

<?php
/**
 * parent 只能调用父类中的公有或受保护的方法,不能调用父类中的属性
 * self  可以调用父类中除私有类型的方法和属性外的所有数据
 */
class User{
    public $name;
    private $passwd;
    protected $email;    
    public  function construct(){
        //print CLASS." ";
        $this->name= &#39;simple&#39;;
        $this->passwd=&#39;123456&#39;;
        $this->email = &#39;bjbs_270@163.com&#39;;
    }    
    public function show(){
        print "good ";
    }    
    public function inUserClassPublic() {
        print CLASS.&#39;::&#39;.FUNCTION." ";
    }    
    protected  function inUserClassProtected(){
        print CLASS.&#39;::&#39;.FUNCTION." ";
    }    
    private function inUserClassPrivate(){
        print CLASS.&#39;::&#39;.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.&#39;::&#39;.FUNCTION." ";
    }
    
    protected function inSimpleUserClassProtected(){
        print CLASS.&#39;::&#39;.FUNCTION." ";
    }
    
    private function inSimpleUserClassPrivate() {
        print CLASS.&#39;::&#39;.FUNCTION." ";
    }
}

class adminUser extends simpleUser {
    protected $admin_user;
    public function construct(){
        //print CLASS." ";
        parent::construct();
    }
    
    public function inAdminUserClassPublic(){
        print CLASS.&#39;::&#39;.FUNCTION." ";
    }
    
    protected function inAdminUserClassProtected(){
        print CLASS.&#39;::&#39;.FUNCTION." ";
    }
    
    private function inAdminUserClassPrivate(){
        print CLASS.&#39;::&#39;.FUNCTION." ";
    }
}

class administrator extends adminUser {
    public function construct(){        
        parent::construct();
    }
}

/**
 * 在类的实例中 只有公有属性和方法才可以通过实例化来调用
 */
$s = new administrator();
print &#39;-------------------&#39;;
$s->show();
?>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn