Heim  >  Artikel  >  Backend-Entwicklung  >  Allgemeine Funktionen und Verwendung von Magic-Methoden in PHP

Allgemeine Funktionen und Verwendung von Magic-Methoden in PHP

不言
不言Original
2018-07-05 11:35:502502Durchsuche

Dieser Artikel stellt hauptsächlich die Funktionen und die Verwendung gängiger magischer Methoden in PHP vor. Jetzt kann ich ihn mit Ihnen teilen.

Übersicht

Bei der objektorientierten Programmierung stellt PHP eine Reihe magischer Methoden bereit, die viel Komfort beim Programmieren bieten. Magische Methoden in PHP beginnen normalerweise mit __ (zwei Unterstrichen) und erfordern keine expliziten Aufrufe, sondern werden durch bestimmte Bedingungen ausgelöst.

Bevor Sie beginnen

Bevor wir die magischen Methoden von PHP zusammenfassen, definieren wir zwei Klassen für spätere Beispiele:

<?php
class Device{    
public $name,$battery,$data = [],$connection;    
protected function connect(){        
$this->connection = &#39;resource&#39;;        
echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    
    protected function disconnect(){       
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}

Die Device-Klasse hat vier Mitgliedsattribute und zwei Mitgliedsmethoden.

<?php 

class Battery{    
private $charge = 0;    
public function setCharge($charge){        
$charge = (int)$charge;        
if($charge < 0){            
$charge = 0;
        }else if($charge > 100){            
        $charge = 100;
        }        $this->charge = $charge;
    }
}

Die Battery-Klasse hat eine Member-Eigenschaft und eine Member-Methode.

Konstruktor und Destruktor

Konstruktor und Destruktor werden aufgerufen, wenn das Objekt erstellt bzw. zerstört wird. Wenn ein Objekt „zerstört“ wird, bedeutet dies, dass es keinen Verweis auf das Objekt gibt. Wenn beispielsweise die Variable, die auf das Objekt verweist, gelöscht (nicht gesetzt) ​​wird oder die Skriptausführung endet, wird der Destruktor aufgerufen.

__construct()

__construct() Der Konstruktor ist mit Abstand die am häufigsten verwendete Funktion. Beim Erstellen eines Objekts können Sie im Konstruktor einige Initialisierungsarbeiten durchführen. Sie können für den Konstruktor beliebig viele Parameter definieren, sofern bei der Instanziierung die entsprechende Anzahl Parameter übergeben wird. Jede im Konstruktor auftretende Ausnahme verhindert, dass das Objekt erstellt wird.

<?php
class Device{    
public $name,$battery,$data = [],$connection;    
public function __construct(Battery $battery,$name){        
$this->battery = $battery;        
$this->name = $name;        
$this->connect();
    }    protected function connect(){        
    $this->connection = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}

Im obigen Beispielcode weist der Konstruktor der Device-Klasse den Mitgliedseigenschaften Werte zu und ruft die connect()-Methode auf.

Die Deklaration des Konstruktors als private Methode verhindert, dass Objekte außerhalb der Klasse erstellt werden, was häufig im Simplex-Muster verwendet wird.

__dectruct()

Der Destruktor wird normalerweise aufgerufen, wenn das Objekt zerstört wird. Der Destruktor erhält keine Parameter. Im Destruktor werden häufig einige Aufräumarbeiten durchgeführt, z. B. das Schließen der Datenbankverbindung usw.

__get()

Die magische Methode __get() wird aufgerufen, wenn wir versuchen, auf eine nicht vorhandene Eigenschaft zuzugreifen. Es empfängt einen Parameter, der den Namen des Attributs darstellt, auf das zugegriffen wird, und gibt den Wert des Attributs zurück. In der Geräteklasse oben gibt es ein Datenattribut, das hier eine Rolle spielt, wie im folgenden Code gezeigt:

<?php 

class Device{    
public $name,$battery,$data = [],$connection;    
public function __construct(Battery $battery,$name){        
$this->battery = $battery;        
$this->name = $name;        
$this->connect();
    }    protected function connect(){        
    $this->connection = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    
    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}
$battery = new Battery();
$device = new Device($battery,&#39;mac&#39;);
echo $device->aaa; //Notice: Undefined property: Device::$aaa
<?phpheader("Content-type: text/html; 
charset=utf-8");
class Device{    
public $name,$battery,$data = [],$connection;   
public function __construct(Battery $battery,$name){        
$this->battery = $battery;        
$this->name = $name;        
$this->connect();
    }    
    public function __get($name){        
    if(array_key_exists($name,$this->data)){            
    return $this->data[$name];
        }        
        return &#39;属性不存在&#39;;
    }    
    protected function connect(){        
    $this->connection = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}$battery = new Battery();
$device = new Device($battery,&#39;mac&#39;);
echo $device->aaa; //macconnected 属性不存在

Der am häufigsten verwendete Ort für diese magische Methode ist die Erstellung eines „schreibgeschützten“ Eigenschaften zur Erweiterung der Zugriffskontrolle. In der oben genannten Battery-Klasse gibt es ein privates Attribut $charge. Wir können dieses Attribut über die magische Methode __get() erweitern, damit es außerhalb der Klasse lesbar, aber nicht änderbar ist. Der Code lautet wie folgt:

<?php 

class Battery {    
private $charge = 0; 
    public function  __get($name) {        
    if(isset($this->$name)) {            
    return $this->$name;
        }        
        return null;
    }
}

__set()

Die magische Methode __set() wird aufgerufen, wenn wir versuchen, eine unzugängliche Eigenschaft zu ändern. Sie empfängt zwei Parameter: Einer repräsentiert den Namen des Attributs und einer repräsentiert den Wert des Attributs. Der Beispielcode lautet wie folgt:

<?php
header("Content-type: text/html; charset=utf-8");
class Device{    
public $name,$battery,$data = [],$connection;    
public function __construct(Battery $battery,$name){        
$this->battery = $battery;        
$this->name = $name;       
$this->connect();
    }    
    public function __get($name){        
    if(array_key_exists($name,$this->data)){            
    return $this->data[$name];
        }        
        return &#39;属性不存在&#39;;
    }    
    public function __set($name,$value){        
    $this->data[$name] = $value;
    }    protected function connect(){        
    $this->connection = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}$battery = new Battery();
$device = new Device($battery,&#39;mac&#39;);
$device->aaa = &#39;哈哈&#39;;
echo $device->aaa; //macconnected 哈哈

__isset()

Die magische Methode __isset() wird aufgerufen, wenn die Methode isset() für eine unzugängliche Eigenschaft aufgerufen wird. Es erhält einen Parameter, der den Namen des Attributs angibt. Es sollte einen booleschen Wert zurückgeben, der angibt, ob die Eigenschaft vorhanden ist. Der Code lautet wie folgt:

<?php
class Device{    
private function __isset($name){        
return array_key_exists($name,$this->data);
    }

Wenn die Mitglieder im Objekt öffentlich sind, können Sie die Funktion isset() direkt verwenden. Wenn es sich um ein privates Mitgliedsattribut handelt, müssen Sie der Klasse

__unset()

__unset() die magische Methode __isset() hinzufügen, bevor Sie unset aufrufen ()-Funktion wird aufgerufen, wenn eine unzugängliche Eigenschaft zerstört wird. Sie erhält einen Parameter, der den Namen der Eigenschaft ausdrückt.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Einführung in die magischen Konstanten (Variablen), magischen Methoden (Funktionen) und superglobalen Variablen von PHP

Das obige ist der detaillierte Inhalt vonAllgemeine Funktionen und Verwendung von Magic-Methoden in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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