135 votes

Est-il possible de créer des classes statiques en PHP (comme dans c#) ?

Je veux créer une classe statique en PHP et il se comporte comme il le fait en c#, donc

  1. Constructeur est appelé automatiquement lors du premier appel à la classe
  2. Aucune instanciation requise

Quelque chose de ce genre...

195voto

Greg Points 132247

Vous pouvez avoir une classe statique en PHP, mais ils n’appellent le constructeur automatiquement (si vous essayez des appelez auto ::__construct() vous obtiendrez une erreur).

Par conséquent, vous devrez créer un `` fonctionner et appelez-le dans chaque méthode :

50voto

Phil Points 1158

En plus de la réponse de Greg, je recommanderais de mettre le constructeur privé, qu’il est impossible d’instancier la classe.

Donc, à mon humble avis, c’est un exemple plus complet, basé sur celui de Greg :

24voto

Andreas Niedermair Points 8907

vous pouvez avoir ceux de « statique »-comme des classes. mais je suppose, qu’il manque quelque chose de très important : en php vous n’avez pas un cycle d’app, alors vous n’obtiendrez un véritable statique (ou singleton) dans votre application toute...

Voir http://stackoverflow.com/questions/432192/singleton-in-php

3voto

borrel Points 578
<pre><code></code><p><pre><code></code></pre><p>C’est l’utilisation de singleton <code></code></p></pre>

3voto

dave.zap Points 185

En général, je préfère écrire des non-statiques des classes et de l'utilisation d'une usine de la classe à instancier unique ( sudo statique ) les instances de l'objet.

De cette façon, le constructeur et le destructeur de travail, comme la normale, et je peux créer d'autres non statique des cas, si je le souhaite ( par exemple une deuxième connexion DB )

J'en utilise tout le temps et est particulièrement utile pour la création de DB stocker les gestionnaires de session, que lorsque la page se termine le destructeur va pousser à la session de la base de données.

Un autre avantage est que vous pouvez ignorer l'ordre vous appelez les choses que tout va être installé sur demande.

class Factory {
    static function &getDB ($construct_params = null)
    {
        static $instance;
        if( ! is_object($instance) )
        {
            include_once("clsDB.php");
            $instance = new clsDB($construct_params);   // constructor will be called
        }
        return $instance;
    }
}

La classe DB...

class clsDB {

    $regular_public_variables = "whatever";

    function __construct($construct_params) {...}
    function __destruct() {...}

    function getvar() { return $this->regular_public_variables; }
}

N'importe où vous voulez à utiliser, il suffit d'appeler...

$static_instance = &Factory::getDB($somekickoff);

Puis il suffit de traiter toutes les méthodes non statiques ( car ils le sont )

echo $static_instance->getvar();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X