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

Introduction au contrôle d'accès PHP

藏色散人
Libérer: 2023-04-07 19:40:01
avant
2252 Les gens l'ont consulté

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" # 这么写是错误的。属性必须定义访问控制
}
Copier après la connexion

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");
    }
}
Copier après la connexion

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

class Demo()
{
    private function __construct()
    {
        print("I&#39;m a private construct function");
    }
}
Copier après la connexion

É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&#39;m a private construct function");
    }
    
    public static function getInstance()
    {
    
        return new Demo();#这是Demo类内部,可以用new Demo()实例化调用私有的__construct()方法
    }
}
#在类外面,我们就可以这么玩了
Demo::getInstance();
Copier après la connexion

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&#39;m a private construct function");
    }
    # 先定义一个空成员装对象
    public $_object = null;
    public static function getInstance()
    {
        if(empty(self::$_object))
        {        
            # 如果没有创建过,那么就new一个
            return new Demo();
        }
        #否则(即以及创建过),我们只要放回已经存在的那个即可
        return $_object
    }
}
Copier après la connexion

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!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal