Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2011, 09h53   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
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 :
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 :
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
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 11h46   #2
Membre régulier
 
Homme Thomas DUTRION
Développeur Web
Inscription : février 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Thomas DUTRION
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 58
Points : 93
Points : 93
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 :
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 :
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 :
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 :
1
2
3
4
5
6
7
 
private $sql = array(
	'server' 	=> SQL_HOST,
	'database' 	=> SQL_DATABASE,
	'user' 		=> SQL_USER,
	'password' 	=> SQL_PASS
);
__________________
Recherche poste de développeur web PHP/Zend Framework sur Lille (hors SSII)
Théocrite est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/09/2011, 13h44   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
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
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 13h53   #4
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
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
Citation:
...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.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 14h00   #5
Membre régulier
 
Homme Thomas DUTRION
Développeur Web
Inscription : février 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Thomas DUTRION
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 58
Points : 93
Points : 93
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.
__________________
Recherche poste de développeur web PHP/Zend Framework sur Lille (hors SSII)
Théocrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 21h24   #6
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
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 :
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
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 09h08   #7
Membre régulier
 
Homme Thomas DUTRION
Développeur Web
Inscription : février 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Thomas DUTRION
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 58
Points : 93
Points : 93
Tu devrais revoir un peu la programmation orienté objet, en php et même niveau concept... Regarde un tuto sur les bases de la programmation orientée objet en PHP, puis une fois que tu auras les bases, regarde ceux que tu peux trouver ici.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
require ('conf_global.php');
 
class maclasse {
 
     public $url = SITE_URL; // constante définie dans l'autre fichier conf_global.php
 
    function mafonction() {
 
        $r .= $this->url;
 
    }
 
}
Je vois pas ce que tu veux faire avec ton global en fait...

J'ai mis ton attribut url en public, mais tu peux changer avec protected ou private...
__________________
Recherche poste de développeur web PHP/Zend Framework sur Lille (hors SSII)
Théocrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h03   #8
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
Citation:
Envoyé par Théocrite Voir le message
Tu devrais revoir un peu la programmation orienté objet, en php et même niveau concept...
Je m'y emploie tous les jours
L'inconvénient de l'auto formation dans mon cas, est d'avancer un peu à l'instinct en testant des méthodes en fonction des besoins (pros/persos) qui tombent. Résultat, on se prend les pieds dans le tapis régulièrement.

Merci Je consulte régulièrement les cours et tutos de ce site, je teste ensuite des morceaux de code, et quand je bute trop longtemps sur un problème, j'use de faiblesse en faisant appel à vous.


Citation:
Je vois pas ce que tu veux faire avec ton global en fait...
Définir la valeur de la variable une seule fois et utiliser cette variable dans plusieurs fonctions.

Maintenant à la déclaration de la variable en dessous de la classe, pourquoi :
  • $url = SITE_URL; -> renvoie un unexpected t_variable ?
  • var $url = SITE_URL; -> renvoie un unexpected t_variable ?
  • global $url = SITE_URL; -> renvoie un unexpected t_variable ?
  • public $url = SITE_URL; -> fonctionne ?
Sachant que je m'inspire toujours d'exemples qui fonctionnent sur developpez ou autres sites sur le web.

J'avoue être enduit d'interrogation
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h15   #9
Membre régulier
 
Homme Thomas DUTRION
Développeur Web
Inscription : février 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Thomas DUTRION
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 58
Points : 93
Points : 93
Citation:
Envoyé par Beniti Voir le message
Merci Je consulte régulièrement les cours et tutos de ce site, je teste ensuite des morceaux de code, et quand je bute trop longtemps sur un problème, j'use de faiblesse en faisant appel à vous.
Demander n'est pas une preuve de faiblesse, c'est une preuve que tu as envie d'apprendre !

Citation:
Envoyé par Beniti Voir le message
Définir la valeur de la variable une seule fois et utiliser cette variable dans plusieurs fonctions.
C'est le cas des globales, que tu as définis avec le define, mais aussi dans le cas des classes tu peux utiliser dans certains cas les attributs de ta classe, notamment les statiques, et les constantes.

C'est à toi de déterminer l'architecture de ton projet ensuite pour choisir la meilleure solution.

Citation:
Envoyé par Beniti Voir le message
Maintenant à la déclaration de la variable en dessous de la classe, pourquoi :
  • $url = SITE_URL; -> renvoie un unexpected t_variable ?
  • var $url = SITE_URL; -> renvoie un unexpected t_variable ?
  • global $url = SITE_URL; -> renvoie un unexpected t_variable ?
  • public $url = SITE_URL; -> fonctionne ?
Concernant les attributs, il me semblait que var aurait du marcher, mais il apparait que non, ce qui me fait penser qu'ils ont supprimé ce mot clé sur php 5.3 (?) ou avant peut être... J'utilisais var en PHP 4, depuis j'ai évolué.

D'un point de vue objet, les attributs de classe doivent toujours disposer d'une indication de visibilité (private, protected, public), et les méthodes (function) aussi.

Les codes que tu prends sur des sites et qui ne fonctionnent pas proviennent probablement d'un problème de version. PHP introduit des notions d'objets en version 4, mais rien de très convaincant, après quoi la version 5 apporte un grand nombre de modifications, d'où la création de problèmes.
__________________
Recherche poste de développeur web PHP/Zend Framework sur Lille (hors SSII)
Théocrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h17   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
quel est l’intérêt de faire une classe pour mysql sachant que y'a PDO ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h19   #11
Membre régulier
 
Homme Thomas DUTRION
Développeur Web
Inscription : février 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Thomas DUTRION
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 58
Points : 93
Points : 93
Citation:
Envoyé par stealth35 Voir le message
quel est l’intérêt de faire une classe pour mysql sachant que y'a PDO ?
Une construction automatique de pdo à partir d'un fichier de conf ? (c'est pas le cas ici, mais on pourrait y venir...).
__________________
Recherche poste de développeur web PHP/Zend Framework sur Lille (hors SSII)
Théocrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h23   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par Théocrite Voir le message
Une construction automatique de pdo à partir d'un fichier de conf ? (c'est pas le cas ici, mais on pourrait y venir...).
?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h34   #13
Membre régulier
 
Homme Thomas DUTRION
Développeur Web
Inscription : février 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Thomas DUTRION
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 58
Points : 93
Points : 93
La classe ne devrait pas contenir les accès à mysql mais plutôt permettre de parser un fichier de conf pour récupérer les informations de connexions à la base de données, et donc être une couche d'accès à la BD supplémentaire.
__________________
Recherche poste de développeur web PHP/Zend Framework sur Lille (hors SSII)
Théocrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h35   #14
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
Citation:
Envoyé par stealth35 Voir le message
quel est l’intérêt de faire une classe pour mysql sachant que y'a PDO ?
PDO n'est pas natif sur PHP5 et peut ne pas être installé sur un hébergeur externe. Si je bosse en local ou au travail, ça ne pose pas de problème parce que j'ai la main sur le serveur web et je peux installé les extensions qui m'intéressent, mais sur un hébergeur public qui n'a pas installé cette extension, le code deviendra caduque. Donc dans le doute. Après il y a toujours possibilité de faire évoluer le code au fil du temps et des évolutions dans les méthodes

@Théocrite : Oui il faut que je m'adapte aux versions. En tout cas, grâce à vous, je peux appréhender les erreurs avec plus d'efficacité
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h39   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par Beniti Voir le message
PDO n'est pas natif sur PHP5 et peut ne pas être installé sur un hébergeur externe.
ah t'es chez quel hébergeur ?

pour info on ne debug pas de mysql_* avec des or die (de plus c'est pas die mais exit) mais avec le mysql.trace_mode
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/09/2011, 10h47   #16
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
Citation:
Envoyé par stealth35 Voir le message
ah t'es chez quel hébergeur ?
Web4all. Mais peut importe s'ils ont activé le PDO ou pas. Si dans un an je change d'hébergeur, je transfère mes pages et je vois que l'extension est absente. Je me retrouverais bien mal fichu.

Citation:
pour info on ne debug pas de mysql_* avec des or die (de plus c'est pas die mais exit) mais avec le mysql.trace_mode
http://eusebius.developpez.com/phpmysql-base/
Mon code est intimement lié à mes références
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h51   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par Beniti Voir le message
Web4all. Mais peut importe s'ils ont activé le PDO ou pas. Si dans un an je change d'hébergeur, je transfère mes pages et je vois que l'extension est absente. Je me retrouverais bien mal fichu.
t'auras surtout pas de chance puisque déjà de nos jour un hébergeur sans PDO n'est pas un bon hébergeur, et j'irai même plus loin en disant qu'un hébergeur sans PHP 5.3 n'est pas un bon hébergeur

Citation:
Envoyé par Beniti Voir le message
http://eusebius.developpez.com/phpmysql-base/
Mon code est intimement lié à mes références
Date de mise à jour : 24/09/06

faut se mettre à la page un de ces jours ...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/09/2011, 11h06   #18
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
Citation:
Envoyé par stealth35 Voir le message
Date de mise à jour : 24/09/06
faut se mettre à la page un de ces jours ...
Tu peux m'en dire plus ?
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h21   #19
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par Beniti Voir le message
Tu peux m'en dire plus ?
ta référence est un tuto qui date de 5 ans, tu ne trouves pas qu'il y'a un problème quelque part ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 12h12   #20
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
Citation:
Envoyé par stealth35 Voir le message
ta référence est un tuto qui date de 5 ans, tu ne trouves pas qu'il y'a un problème quelque part ?
J'avais compris l'obsolescence de cette méthode. Par contre, je ne vois pas de cours ou explications tagés stealth35 le 09/09/2011.
C'est sympa de me prévenir que, attention le debug que tu utilises n'est pas valable (encore que j'arrive à retomber sur mes pieds quand une erreur de requête survient), mais sans explications plus concises que "c'est pas die mais exit et c'est avec le mysql.trace_mode", ça va pas m'aider. Si tu as un exemple de la façon la plus opportune de debuger mysql je suis preneur
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h34.


 
 
 
 
Partenaires

Hébergement Web