Heim > Backend-Entwicklung > PHP-Tutorial > Einführung in die PHP-Zugriffskontrolle

Einführung in die PHP-Zugriffskontrolle

藏色散人
Freigeben: 2023-04-07 19:40:01
nach vorne
2217 Leute haben es durchsucht

Einführung in die PHP-Zugriffskontrolle

1. Attributzugriffskontrolle

In PHP müssen Klassenattribute als öffentlich definiert werden (eines von drei: öffentlich), geschützt (geschützt), privat (privat). In PHP4 können Sie das Schlüsselwort var verwenden, um Attribute zu definieren, die standardmäßig nicht öffentlich sind. Auf Klassenmitglieder, die als öffentlich definiert sind, kann von überall aus zugegriffen werden. Auf Klassenmitglieder, die als geschützt definiert sind, können sowohl sie selbst als auch ihre Unterklassen und übergeordneten Klassen zugreifen. Als privat definierte Klassenmitglieder können nur von der Klasse aufgerufen werden, in der sie definiert sind.

Wenn Sie sich für das Schlüsselwort var interessieren, können Sie einen Blick auf http://stackoverflow.com/ques... werfen.

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

2. Methodenzugriffskontrolle

Ähnlich können Methoden in einer Klasse auch als eine von drei definiert werden: öffentlich, geschützt oder privat. Wenn es jedoch öffentlich ist, muss das Schlüsselwort public vor der Methode nicht geschrieben werden. Das heißt, wenn Sie die Schlüsselzeiten nicht schreiben, ist der Standardwert öffentlich.

Zum Beispiel:

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

Was passiert also, wenn der Konstruktor in der Klasse privat gemacht wird? Zum Beispiel:

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

Natürlich können wir new Demo() nicht direkt zum Erstellen einer Instanz verwenden, da die Methode __construct() beim Erstellen einer Instanz extern aufgerufen wird. was zu tun? Möglicherweise können wir eine statische Methode in die Klasse schreiben, um das Instanzobjekt abzurufen. Auf diese Weise können Sie die Methode __construct() in dieser Klasse aufrufen, ohne sie extern zu instanziieren, was perfekt ist!

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();
Nach dem Login kopieren

Aber andererseits privatisieren wir zuerst __construct und versuchen dann unser Bestes, um die Instanz mithilfe statischer Methoden zu erhalten. Was zum Teufel ist das?

Tatsächlich wird diese Methode häufig in Entwurfsmustern verwendet, um die Erstellung von Objekten zu steuern. Beispielsweise lässt das Singleton-Muster nur ein global eindeutiges Objekt zu.

Wenn wir weltweit nur ein eindeutiges Objekt benötigen, reicht der obige Code nicht aus. Denn solange jemand getInstance() zweimal aufruft, werden zwei generiert. Also lasst uns den obigen Code noch einmal ändern

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
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinführung in die PHP-Zugriffskontrolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage