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" # 这么写是错误的。属性必须定义访问控制 }
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"); } }
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"); } }
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();
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 } }
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!