IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Chargement unique d'une variable de classe statique


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut [POO] Chargement unique d'une variable de classe statique
    Bonjour.

    Pour information, je début avec la POO PHP.

    Je souhaite vérifier les valeurs attribuées à une variable de classe en les comparant aux valeurs autorisées enregistrées dans une base de données.
    Pour ce faire, j'envisage d'utiliser une variable 'static', donc commune à toutes les instances de ma classe, sous la forme d'un tableau associatif.
    Comment faire pour que ce tableau ne soit chargé qu'une fois et pas à chaque instanciation ?

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Tu devrais pouvoir faire qque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Foo 
    {
        static public $data = NULL ;
     
        public function __construct( )
        {
            if ( self::$data === NULL ) {
                // Valorisation de self::$data avec les valeurs de la BdD
            }
        }
    }

  3. #3
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    Tant qu'il n'y a pas de constructeurs statiques dans php, et que les données sont connues lors du chargement du fichier contenant la classe, alors je préfère remplir les variables statiques "à la c++":

    Dans l'exemple de Séb.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Foo::$data = ... // trucs d'initialisation de $data
    // ou pseudo constructeur statique
    Foo::construct(...); // pas la même func que __construct()
    Edit: après l'edit de FoxLeRenard, je précise que ma portion de code vient directement après la déclaration de la classe, dans le scope du fichier (en dehors de toute fonctions)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par metagoto Voir le message
    Tant qu'il n'y a pas de constructeurs statiques dans php, et que les données sont connues lors du chargement du fichier contenant la classe, alors je préfère remplir les variables statiques "à la c++":
    Hello,

    Tu peux m'expliquer l'intérêt d'un "constructeur statique" natif dans PHP ?

    Tu affirmes par ailleurs que les données sont connues lors du chargement du fichier contenant la classe, où est le problème dans le cadre de PHP ?

    Merci pour tes précisions

  5. #5
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    Citation Envoyé par Guardian_7 Voir le message
    Hello,

    Tu peux m'expliquer l'intérêt d'un "constructeur statique" natif dans PHP ?
    Le même que pour les constructeurs statiques en C# par exemple.
    Les membres statiques en php ne peuvent être initialisés que par des valeurs littérales ou des constantes.
    Parfois on aimerait, par exemple, qu'un membre statique soit initialisé par la valeur de retour d'une fonction.

    Citation Envoyé par Guardian_7 Voir le message
    Tu affirmes par ailleurs que les données sont connues lors du chargement du fichier contenant la classe, où est le problème dans le cadre de PHP ?

    Merci pour tes précisions
    Initialiser les membres statiques peut être hasardeux car on n'a pas de contrôle sur le moment précis où cette initialisation se produit (c'est aussi valable en c#, c++ etc)
    Pour php, je soulignais que dès lors qu'on est sûr que les données sont connues au moment du chargement du fichier de la classe, alors je place mon code d'initialisation juste après la déclaration de la classe. Ce code est exécuté lors du chargement. Comme ça je garantis que les membres statiques seront initialisés une seule fois et avant toutes autres utilisations de la classe ou d'une instance de la classe.
    Ca revient à créer un custom "constructeur statique".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // fichier A.php
    class A {
       static private $time = 0;
       static private $logger = null;
       static public function construct() {
          self::$time = time();
          self::$logger = new Logger;
       }
       // ..
    }
    A::construct();
     
    // fichier user.php
    require_once 'A.php';
    //ok A::$time; A::$logger sont déjà initialisés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/10/2008, 11h14
  2. Réponses: 7
    Dernier message: 13/04/2007, 18h16
  3. Réponses: 7
    Dernier message: 24/01/2007, 11h01
  4. [POO] Problème d'accès à une variable privée
    Par Nadd dans le forum Langage
    Réponses: 8
    Dernier message: 17/09/2006, 22h43
  5. Réponses: 2
    Dernier message: 11/09/2006, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo