Maison  >  Article  >  développement back-end  >  Introduction au contrôle d'accès PHP

Introduction au contrôle d'accès PHP

藏色散人
藏色散人avant
2019-11-14 14:16:512192parcourir

Introduction au contrôle d'accès PHP

1. Contrôle d'accès aux attributs

En PHP, les attributs de classe doivent être définis comme publics (l'un des trois : public, protégé ou privé. En PHP4, vous pouvez utiliser le mot-clé var pour définir des attributs qui ne sont pas publics par défaut. Les membres de la classe définis comme publics sont accessibles de n’importe où. Un membre de classe défini comme protégé est accessible par lui-même ainsi que par ses sous-classes et classes parentes. Les membres de classe définis comme privés ne sont accessibles que par la classe dans laquelle ils sont définis.

Si vous êtes intéressé par le mot-clé var, vous pouvez jeter un œil à http://stackoverflow.com/ques...

class Foo()
{
    $name = "hello world" # 这么写是错误的。属性必须定义访问控制
}

Méthode de contrôle d'accès

De même, les méthodes d'une classe peuvent également être définies comme l'une des trois suivantes : publique, protégée ou privée. Mais s'il est public, le mot-clé public avant la méthode n'a pas besoin d'être écrit. Autrement dit, si vous n'écrivez pas les heures clés, la valeur par défaut est publique.

Par exemple :

class Bar()
{
    function hello() # 此时该方法默认为公有
    {
        print("hello");
    }
}

Alors, que se passera-t-il si le constructeur de la classe est rendu privé ? Par exemple :

class Demo()
{
    private function __construct()
    {
        print("I'm a private construct function");
    }
}

Évidemment, nous ne pouvons pas utiliser directement new Demo() pour créer une instance, car la méthode __construct() sera appelée en externe lors de la création d'une instance. ce qu'il faut faire? Nous pourrons peut-être écrire une méthode statique dans la classe pour obtenir l'objet instance. De cette façon, vous pouvez appeler la méthode __construct() dans cette classe sans l'instancier en externe, ce qui est parfait !

class Demo()
{
    private function __construct()
    {
        print("I'm a private construct function");
    }
    
    public static function getInstance()
    {
    
        return new Demo();#这是Demo类内部,可以用new Demo()实例化调用私有的__construct()方法
    }
}
#在类外面,我们就可以这么玩了
Demo::getInstance();

Mais là encore, nous privatisons d'abord __construct, puis faisons de notre mieux pour obtenir l'instance en utilisant des méthodes statiques. Qu'est-ce que c'est que ça ?

En fait, cette méthode est souvent utilisée dans les modèles de conception pour contrôler la création d'objets. Par exemple, le modèle singleton n'autorise qu'un seul objet globalement unique.

Si nous n'avons besoin que d'un seul objet unique globalement, le code ci-dessus n'est pas suffisant. Parce que tant que quelqu'un appelle getInstance() deux fois, deux sont générés. Alors modifions à nouveau le code ci-dessus

class Demo()
{
    private function __construct()
    {
        print("I'm a private construct function");
    }
    # 先定义一个空成员装对象
    public $_object = null;
    public static function getInstance()
    {
        if(empty(self::$_object))
        {        
            # 如果没有创建过,那么就new一个
            return new Demo();
        }
        #否则(即以及创建过),我们只要放回已经存在的那个即可
        return $_object
    }
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer