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 :

Class et variables


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 43
    Par défaut Class et variables
    Bonjour

    J'ai un petit soucis avec mes définitions de variables dans mon code php.

    Code conf_global.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    $INFO['sql_host']			=	'mon_serveur_mysql';
    $INFO['sql_database']		=	'ma_base_de_données';
    $INFO['sql_user']			=	'mon_utilisateur';
    $INFO['sql_pass']			=	'mon_mot_de_passe';
     
    ?>

    Code classDB.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
     
    require ('conf_global.php');
     
    class dbMain {
     
        private $sql = array(
    					'server' 	=> $INFO['sql_host'],
    					'database' 	=> $INFO['sql_database'],
    					'user' 		=> $INFO['sql_user'],
    					'password' 	=> $INFO['sql_pass']
    					);
     
    	function __construct() {
     
    		$this->link = mysql_connect($this->sql['server'], $this->sql['user'], $this->sql['password']);			
    			mysql_select_db($this->sql['database'], $this->link) or die(mysql_error());
     
    	}
     
    }
     
    ?>

    J'obtiens l'erreur suivante : Parse error: syntax error, unexpected T_VARIABLE in /var/www/virtual/death-vipers.net/labo/logs/classDb.php on line 8

    Par contre si dans le tableau $sql je mets directement les valeurs stockées dans le conf_global.php, ça fonctionne.

    Apparemment je ne peux pas mettre de variables dans un array et je ne vois pas pourquoi

    Auriez-vous une idée de l'erreur ?

    Cordialement,
    Beniti

  2. #2
    Membre émérite Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Par défaut
    Bonjour,

    A mon avis il s'agit simplement d'un problème de visibilité de variable.

    Le tableau info est certes déclaré dans le fichier de la classe, mais pas à l'intérieur de celle-ci, et ne peut donc être résolu.

    Pour moi, il faut remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
        $INFO['sql_host'] = 'mon_serveur_mysql';
        $INFO['sql_database'] = 'ma_base_de_données';
        $INFO['sql_user'] = 'mon_utilisateur';
        $INFO['sql_pass'] = 'mon_mot_de_passe'; 
    ?>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
        define('SQL_HOST','mon_serveur_mysql');
        define('SQL_DATABASE','ma_base_de_données');
        define('SQL_USER','mon_utilisateur');
        define('SQL_PASS','mon_mot_de_passe'); 
    ?>
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private $sql = array(
    	'server' 	=> $INFO['sql_host'],
    	'database' 	=> $INFO['sql_database'],
    	'user' 		=> $INFO['sql_user'],
    	'password' 	=> $INFO['sql_pass']
    );
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private $sql = array(
    	'server' 	=> SQL_HOST,
    	'database' 	=> SQL_DATABASE,
    	'user' 		=> SQL_USER,
    	'password' 	=> SQL_PASS
    );

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 43
    Par défaut
    Ah, merci pour cette solution, elle fonctionne très bien

    Par contre pour la déclaration de tableaux (et variables) dans la classe, je ne comprends pas bien pourquoi ça ne fonctionne pas.

    Encore merci en tout cas

  4. #4
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par Beniti Voir le message
    Par contre pour la déclaration de tableaux (et variables) dans la classe, je ne comprends pas bien pourquoi ça ne fonctionne pas.
    comme te le dit Théocrite
    ...il s'agit simplement d'un problème de visibilité de variable
    Les variables globales ne sont pas automatiquement vu à l'intérieur des fonctions, classes. Pour qu'ils soient visible tu dois utiliser le mot clé global ou la supergloable $_GLOBALS.

  5. #5
    Membre émérite Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Par défaut
    Si tu veux en savoir plus sur la portée des variables, la doc PHP en parle : portée des variables en PHP (scope en anglais).

    L'article ne parle pas forcément des classes, mais dans le cas d'un objet, les valeurs auxquelles tu auras accès sont limitées : les attributs de la classe, les constantes de classe et les globales.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 43
    Par défaut
    Merci pour les conseils

    J'avais bien testé plusieurs méthodes, dont la référence "global" mais ça ne marchait pas plus.

    D'ailleurs si je fais un truc tout con de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    require ('conf_global.php');
     
    class maclasse {
     
        global $url;
        $this->url = SITE_URL; // constante définie dans l'autre fichier conf_global.php
     
        function mafonction() {
     
            $r .= $this->url;
     
        }
     
    }
    Je me mange invariablement (pour le coup) un unexpected T_GLOBAL (ou T_VARIABLE si je mets pas le global) à la ligne qui correspond à global $url; (ou var $url.

    Je dois pas très bien comprendre le principe d'utilisation. En tout cas ça doit être génial d'utiliser la même variable pour plusieurs fonctions

Discussions similaires

  1. Dll de classe et variable
    Par SkYsO dans le forum Langage
    Réponses: 5
    Dernier message: 10/03/2006, 10h25
  2. Réponses: 3
    Dernier message: 08/12/2005, 15h41
  3. Réponses: 2
    Dernier message: 09/10/2005, 16h35
  4. [Sessions] Classes et variables de sessions
    Par Thanaroth dans le forum Langage
    Réponses: 4
    Dernier message: 06/10/2005, 17h17
  5. Réponses: 6
    Dernier message: 06/10/2004, 13h59

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