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 :

Initialiser des variables hors constructeur


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Par défaut Initialiser des variables hors constructeur
    Bonsoir.

    Je cherche à initialiser des variables, en dehors de tout constructeur, avec des valeurs d'autres variables.
    Ainsi, je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    class Constants {
    	private static $varA = "hello wold";
    	private static $varB = "bonjour le monde";
     
    	public static $var1 = self::$varA;
    	//public static $var1 = $varA;
    	public static $var2 = self::$varA;
    	public static $var3 = self::$varB;
    }
    ?>
    J'ai une erreur du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_VARIABLE
    (en fonction de la présence de self:: ou non).
    Ainsi, je n'ai que la classe de constante à changer, pas les classes qui utilisent $var1, $var2 ou $var3.

    Dans le même genre, j'aurais besoin de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    class Constants {
    	public static $varA = "hello wold";
    }
     
    class Essai {
    	private $myvar = Constants::$varA;
    }
    ?>
    Et rebelotte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING
    Quelle est la bonne syntaxe pour faire cela ?

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    commence par virer tes 2 private pour mettre public à la place

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Hello,

    Le pourquoi se trouve ici : http://fr.php.net/manual/fr/language...properties.php

    Les valeurs par défaut ne peuvent être initialisées que par des littéraux ou des constantes.
    Pour le reste il faudra passer par un constructeur ou des méthodes d'initialisation.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Par défaut
    Arf, pas cool !
    Autant pour la classe Essai, je peux définir explicitement un constructeur au lieu d'utiliser le constructeur implicite, autant je ne vois pas comment faire pour une classe de type Constants.

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut sql_ignorant,

    Je ne vois pas l'intérêt d'avoir une classe Constants avec des variables déclarées static partout.
    Si je suis ta logique ta classe ne devrait comporter que des constantes obligatoirement immutables alors que mettre des static var les rends mutables et elles perdent du coup leur sens Constants

    Ensuite si tu codes sous PHP 5.3+ il te reste le Late Static Binding qui fait des merveille dans le cadre où tu aurais besoin d'initialiser "descriptivement" des variables qui peuvent être déclarées comme const ou static et résolues toutes par le même appel à static::

    Enfin, je me suis coltiné ce genre de problème et le recours au LSB m'a permis d'y apporter une soluce propre.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Par défaut
    L'intérêt ?

    Confiner la portée d'une constante !

    Ainsi, tu peux disposer de constante portant le même nom mais dont la portée est différente. Par exemple, la classe Constants1 peux contenir $name qui concerne l'objet1, et la classe Constants2 qui contient aussi $name mais qui concerne l'objet2.
    Bien sûr, je pourrais nommer mes constantes objet1_name et objet2_name, mais pourquoi rester au modèle de programmation des années 70 quand on peut utiliser des concepts plus modernes ?

    Quant à LSB, ne le connaissant pas, je serai ravi que tu m'en donnes plus d'explication.

Discussions similaires

  1. Initialisation des variables globales dans un package
    Par fred_hte_savoie dans le forum SQL
    Réponses: 2
    Dernier message: 17/04/2007, 10h26
  2. Réponses: 6
    Dernier message: 14/03/2007, 22h04
  3. Réponses: 13
    Dernier message: 05/11/2006, 22h53
  4. Initialisation des variables
    Par gagarine dans le forum Langage
    Réponses: 3
    Dernier message: 03/08/2006, 11h36
  5. [débutant] initialisation des variables.
    Par zui dans le forum Langage
    Réponses: 1
    Dernier message: 05/06/2006, 15h29

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