Heim >Backend-Entwicklung >PHP-Tutorial >Einführung in die späte statische Bindungsfunktion von PHP objektorientiert

Einführung in die späte statische Bindungsfunktion von PHP objektorientiert

高洛峰
高洛峰Original
2016-12-26 16:06:281120Durchsuche

In diesem Artikel wird die späte statische Bindungsfunktion von PHP vorgestellt, die hauptsächlich zur Lösung des Problems der Referenzierung statisch aufgerufener Klassen im Vererbungsbereich verwendet wird.

Sehen Sie sich zunächst das folgende Beispiel an:

class Person
{
 
    public static function status()
    {
        self::getStatus();
    }
 
    protected static function getStatus()
    {
        echo "Person is alive";
    }
 
}
 
class Deceased extends Person
{
 
    protected static function getStatus()
    {
        echo "Person is deceased";
    }
 
}
 
Deceased::status(); //Person is alive

Offensichtlich ist das Ergebnis nicht das, was wir erwartet haben. Dies liegt daran, dass self:: von der Klasse abhängt, in der es definiert ist, nicht von der Laufklasse Art. Um dieses Problem zu lösen, können Sie die Methode status() in der geerbten Klasse überschreiben. Eine bessere Lösung besteht darin, dass PHP 5.3 die Funktion der späten statischen Bindung hinzugefügt hat.

class Person
{
 
    public static function status()
    {
        static::getStatus();
    }
 
    protected static function getStatus()
    {
        echo "Person is alive";
    }
 
}
 
class Deceased extends Person
{
 
    protected static function getStatus()
    {
        echo "Person is deceased";
    }
 
}
 
Deceased::status(); //Person is deceased

Es ist ersichtlich, dass static:: nicht mehr auf die aktuelle Klasse verweist. Tatsächlich wird es zur Laufzeit berechnet, wodurch alle Eigenschaften der endgültigen Klasse abgerufen werden müssen.

Daher wird empfohlen, in Zukunft nicht self:: zu verwenden und static:: zu verwenden.

Weitere Artikel zur Einführung der objektorientierten poststatischen Bindungsfunktion von PHP Bitte achten Sie auf die chinesische PHP-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