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

PHP verzögerte die statische Bindung

巴扎黑
巴扎黑Original
2016-11-11 13:13:50949Durchsuche

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

/*基类*/  
class BaseModel  
{  
  
    private static $instance = null;  
  
    public static function instance()  
    {  
  
        if (empty(self::$instance)) {  
  
            self::$instance = new self();  
        }  
  
        return self::$instance;  
    }  
}

Dann jedes logische Unterklassenmodell

Java-Code

/*商品类*/  
class GoodModel extends BaseModel{  
  
    public function getInfoById($goodId){  
  
        return array(  
            'id'=>$goodId,  
            'name'=>'小苹果',  
            'logo'=>'http://t3.qlogo.cn/mbloghead/65518bb9e5287fcd5864/180'  
        );  
    }  
}  
  
################################################################  
$good = GoodModel::instance();  
  
var_dump($good);


Diese Art von $gut ist

Java-Code

object(BaseModel)#1 (0) {  
}


Unnötiges GoodModel


Das ist die Notwendigkeit, sich selbst vorzustellen

self::Die aufgerufene Variable ist nur die der Klasse. Auch wenn die Klasse geerbt und die Variable überschrieben wird, gibt die Funktion self::called in der übergeordneten Klasse weiterhin den Variablenwert der übergeordneten Klasse aus Der Wert von


erfordert das Schlüsselwort static, um die statische Bindung zu verzögern.
Der Code lautet wie folgt:

Java-Code

/ *Basisklasse*/

class BaseModel  
{  
  
    private static $instance = null;  
  
    public static function instance()  
    {  
  
        if (empty(self::$instance)) {  
  
            self::$instance = new static();  
        }  
  
        return self::$instance;  
    }  
}

Das $gute zu diesem Zeitpunkt ist

Java-Code

object(GoodModel)#1 (0) {  
}

Tatsächlich die get_claimed_class Die Funktion kann auch zur Lösung des oben genannten Problems verwendet werden. Der Code lautet wie folgt:

Java-Code

class BaseModel  
{  
  
    private static $instance = null;  
  
    public static function instance()  
    {  
  
        if (empty(self::$instance)) {  
  
            $className = get_called_class();  
            self::$instance = new $className();  
        }  
  
        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