Heim > Artikel > Backend-Entwicklung > PHP verzögerte die statische Bindung
Ich bin kürzlich in einem Projekt auf einen solchen Fall gestoßen. Ich bin der Meinung, dass alle Modellklassen Singletons sein müssen, um eine höhere Leistung zu erzielen. Da alle Modelle die einheitliche übergeordnete Klasse BaseModel erben, fügen Sie den Code zur Steuerung des Singletons in BaseModel hinzu. Wie folgt:
Java-Code
/*Basisklasse*/
Klasse BaseModel
{
private static $instance = null;
öffentliche statische Funktionsinstanz()
{
if (leer ( self::$instance)) {
self::$instance = new self(
}
return self::$instance;
}
}
Dann jedes logische Unterklassenmodell
Java-Code
/*Commodity-Klasse*/
Klasse GoodModel erweitert BaseModel{
öffentliche Funktion getInfoById($goodId){
return array(
'id'=>$goodId,
'name'=>'Little Apple',
'logo'=> ' http://t3.qlogo.cn/mbloghead/65518bb9e5287fcd5864/180'
);
}
}
############################################# ###########
$good = GoodModel::instance();
var_dump($good);
Solch ein $gut ist
Java-Code
object(BaseModel)#1 (0) {
}
Unnötiges GoodModel
Dies ist die Notwendigkeit, self einzuführen
self:: Die aufgerufene Variable ist nur die der Klasse, auch wenn die Klasse geerbt ist, wird die Variable beim Aufruf überschrieben Die Funktion self:: in der übergeordneten Klasse gibt die aufgerufene Variable weiterhin den Variablenwert der übergeordneten Klasse anstelle des überschriebenen Werts aus
Daher muss das Schlüsselwort static verwendet werden, um die statische Bindung zu verzögern. static stellt dar: Der Code der Unterklasse
lautet wie folgt:
Java-Code
/*base class*/
class BaseModel
{
private static $instance = null;
öffentliche statische Funktionsinstanz()
{
if (empty(self::$instance)) {
self::$instance = new static();
}
return self::$instance;
}
}
Das $good zu diesem Zeitpunkt ist
Java-Code
object(GoodModel)#1 (0) {
}
Tatsächlich kann die Funktion get_claimed_class dies auch Der Code lautet wie folgt:
Java-Code
Klasse BaseModel
{
private static $instance = null;
öffentliche statische Funktionsinstanz()
{
if (empty(self ::$instance)) {
$className = get_claimed_class(); 🎜>
return self::$instance;
}
}