Heim >Backend-Entwicklung >PHP-Tutorial >PHP verzögerte die statische Bindung

PHP verzögerte die statische Bindung

巴扎黑
巴扎黑Original
2016-11-11 17:29:421283Durchsuche

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;

    }  

}


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
Vorheriger Artikel:PHP neu ladenNächster Artikel:PHP neu laden