PHP Propriétés statiques et variables


Exemple

Les propriétés de classe statique définies avec la visibilité public sont fonctionnellement identiques aux variables globales. Ils sont accessibles depuis n'importe où la classe est définie.

class SomeClass {
    public static int $counter = 0;
}

// The static $counter variable can be read/written from anywhere
// and doesn't require an instantiation of the class
SomeClass::$counter += 1;

Les fonctions peuvent également définir des variables statiques dans leur propre domaine. Ces variables statiques persistent à travers plusieurs appels de fonction, contrairement aux variables régulières définies dans une étendue de fonction. Cela peut être un moyen très simple et facile d'implémenter le modèle de conception Singleton:

class Singleton {
    public static function getInstance() {
        // Static variable $instance is not deleted when the function ends
        static $instance;

        // Second call to this function will not get into the if-statement,
        // Because an instance of Singleton is now stored in the $instance
        // variable and is persisted through multiple calls
        if (!$instance) {
            // First call to this function will reach this line,
            // because the $instance has only been declared, not initialized
            $instance = new Singleton();
        }

        return $instance;

    }
}

$instance1 = Singleton::getInstance();
$instance2 = Singleton::getInstance();

// Comparing objects with the '===' operator checks whether they are
// the same instance. Will print 'true', because the static $instance
// variable in the getInstance() method is persisted through multiple calls
var_dump($instance1 === $instance2);