Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2394 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Utiliser une constante définie en dehors d'une classe dans celle-ci

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utiliser une constante définie en dehors d'une classe dans celle-ci

n°1228047
bob007
Posté le 21-10-2005 à 14:29:36  profilanswer
 

Salut all,
 
voila le problème: j'ai un define en dehors d'une classe. Et dans cette classe, je voudrais utiliser ce define.
Comment faire ?
 
Ca doit pas etre bien dure, mais je ne trouve rien la dessus.
 
Merci de votre aide par avance ;)

mood
Publicité
Posté le 21-10-2005 à 14:29:36  profilanswer
 

n°1228055
sielfried
Posté le 21-10-2005 à 14:34:46  profilanswer
 

Qu'est-ce que t'arrives pas à faire, concrètement ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1228072
bob007
Posté le 21-10-2005 à 14:41:51  profilanswer
 

concretement dans ma classe, quand j'utilise ma constante qui est définie a l'exterieur de la classe, php dit que cette constante n'est pas definie. (alors qu'elle l'est je m'en sers ailleurs sans problème)
 
Tout se passe comme si dans une classe, les constantes définies à l'exterieur de celle-ci n'étaient pas accessibles, ce que je comprends mais je ne vois pas comment y acceder.

n°1228074
gatsusat
Posté le 21-10-2005 à 14:42:41  profilanswer
 

une constante c'est une constante, ca se met en entete du programme, et ca servira dans tout le programme.
 
ou vois tu que tu peux foutre une constante dans une classe. qui plus est débile comme manière.
 
 
et quand tu definie une constante, pour t'en reservir tu as juste à taper le nom de ta constante :  
 
MA_CONSTANTE
 
prefere les majuscules pour determiner les constantes


---------------
Les CSS c'est bon mangez-en
n°1228086
omega2
Posté le 21-10-2005 à 14:50:01  profilanswer
 

C'est quoi qu'est déclaré en premier : la constante ou la classe?

n°1228103
bob007
Posté le 21-10-2005 à 15:02:45  profilanswer
 

En premier la constante est déclarée.
Bon démonstration:
j'ai une ligne comme ca dans un fichier ou y'en a plein:

Code :
  1. define('AVATARS_TABLE', $table_prefix . 'avatars');


ok, apres j'ai ca:

Code :
  1. include_once($root_path . 'includes/defines.php');


Code :
  1. class user
  2. {
  3. function user($pseudo, $pass)
  4. {
  5.              echo AVATARS_TABLE . "<br />\n";
  6.         }
  7. }


Bon c'est un exemple mais le principe est la!
 
Merci de votre aide

n°1228166
sielfried
Posté le 21-10-2005 à 15:56:49  profilanswer
 

L'erreur tu l'as rien qu'avec la définition de la classe ou c'est quand t'appelles ta méthode user ?
 
Si c'est à l'appel, c'est probablement parce que t'as pas défini la constante *avant* de l'appeler.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1228178
bob007
Posté le 21-10-2005 à 16:07:28  profilanswer
 

c'est a l'appel !  
Pourtant j'ai bien l'include avant la définition de ma classe...

n°1228179
sielfried
Posté le 21-10-2005 à 16:09:17  profilanswer
 

Mais est-ce que tu as l'include avant l'appel de user ?
 
C'est pas la même chose.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1228182
bob007
Posté le 21-10-2005 à 16:12:13  profilanswer
 

voici l'appel de user:

Code :
  1. include_once($neta_root_path . 'includes/login_class.php');
  2. if (!isset($_GET['action']))
  3. {
  4.               // du code ici
  5. }
  6. else if ($_GET['action'] == "login" )
  7. {
  8.  $user = new user($_GET['pseudo'], $_GET['passwd']);
  9. }


 
Merci pour ton aide en tous cas

mood
Publicité
Posté le 21-10-2005 à 16:12:13  profilanswer
 

n°1228185
Xav_
The only one...
Posté le 21-10-2005 à 16:13:15  profilanswer
 

ben s'il l'a avant la déclaration, il l'a forcément avant l'appel....
 
pasque il est obligé d'avoir déclaré avant d'avoir appelé, sinon il aurait une erreur de class non définie...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1228187
sielfried
Posté le 21-10-2005 à 16:16:00  profilanswer
 

Xav_ a écrit :

ben s'il l'a avant la déclaration, il l'a forcément avant l'appel....
 
pasque il est obligé d'avoir déclaré avant d'avoir appelé, sinon il aurait une erreur de class non définie...


 
Non, tu peux la définir après. En PHP5 ça marche en tout cas.
 
bob007 > ben voilà, rajoute un include_once($root_path . 'includes/defines.php'); avant ton if.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1228203
bob007
Posté le 21-10-2005 à 16:25:34  profilanswer
 

marche pas mieux !
j'ai ajouté cet include avant le if, et aussi explicitement avant la déclaration de la classe (il est inclus par un autre .php normalement)

n°1228208
Xav_
The only one...
Posté le 21-10-2005 à 16:27:40  profilanswer
 

tu veux dire qu'en PHP5 tu peux appeler une classe avant de l'avoir définie ???
 
houlà, ce langage m'étonnera chaque jour un peu plus....


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1228214
sielfried
Posté le 21-10-2005 à 16:33:58  profilanswer
 

Xav_ a écrit :

tu veux dire qu'en PHP5 tu peux appeler une classe avant de l'avoir définie ???
 
houlà, ce langage m'étonnera chaque jour un peu plus....


 
Ca marche aussi avec les fonctions.
 
Le PHP est ultra-permissif, c'est pas une nouveauté.  [:spamafote]  
 
bob007 > euh, ouais bon colle le code de tes 3-4 fichiers principaux avec leurs chemins, voir.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1228223
bob007
Posté le 21-10-2005 à 16:42:26  profilanswer
 

OK chef. C'est partii:
dans ~/includes/login.php

Code :
  1. include_once($root_path . 'includes/login_class.php');
  2. include_once($root_path . 'includes/defines.php');
  3. if (!isset($_GET['action']))
  4. {
  5.             //du code ici
  6. }
  7. else if ($_GET['action'] == "login" )
  8. {
  9.  $user = new user($_GET['pseudo'], $_GET['passwd']);
  10. }


Apres, y'a ~/includes/login_class.php:

Code :
  1. include_once($root_path . 'includes/defines.php');
  2. include_once($root_path . 'includes/db/db.php');
  3. include_once($root_path . 'includes/common.php');
  4. class user
  5. {
  6. function user($pseudo, $pass)
  7. {
  8.                echo AVATARS_TABLE;
  9.               //...
  10.         }
  11. }


~/includes/defines.php:

Code :
  1. //...
  2. define('AVATARS_TABLE', $table_prefix . 'avatars');
  3. //...


 
Voila voila


Message édité par bob007 le 21-10-2005 à 16:43:25
n°1228331
gatsusat
Posté le 21-10-2005 à 18:04:41  profilanswer
 

une constante ca veut dire que c'est constant, et donc ca restera toujours constant.
 
et toi qu'est ce que tu fais ?
tu mixe une variable avec une string pour generer ta constante
define('AVATARS_TABLE', $table_prefix . 'avatars');
 
autant utiliser une variable et apprendre à programmer


---------------
Les CSS c'est bon mangez-en
n°1228335
omega2
Posté le 21-10-2005 à 18:08:57  profilanswer
 

bob007 > Comment être certain que ta constante est bien déclaré avant ta classe alors que dans ton fichier principal le fichier contenanbt la contante est inclus aprés celui de la classe? Si par malheur tous les include_once du fichier principal sont transformé avant le traitement des autres fichiers ta constante se retrouve derriére la classe.

n°1228346
bob007
Posté le 21-10-2005 à 18:18:02  profilanswer
 

gatsuat> Heu ecoute bonhomme, si c'est pour dire ca, tu te la garde ta reflexion. Le $table_prefix est comme son nom l'indique le prefix des tables sql, et donc constant tout le long de l'application. De plus ce principe de define constante a partir d'une variable, c'est pas nouveau et je ne suis pas le seul a faire comme ca (cf pas mal de forums, cms et autres).
 
Omega2> Je pense que c'est toi qui a raison! En changeant l'ordre des inclusions ca devrait marcher, ca serait logique! (atta je test: non pas mieux). La solution est dans cette optique je pense. Merci de m'avoir éclairé !

n°1228500
sielfried
Posté le 21-10-2005 à 22:27:48  profilanswer
 

Met des print_r(get_defined_constants()) un peu partout et regarde à quel moment ta constante est définie et à quel moment elle ne l'est pas/plus.
 

bob007 a écrit :

gatsuat> Heu ecoute bonhomme, si c'est pour dire ca, tu te la garde ta reflexion. Le $table_prefix est comme son nom l'indique le prefix des tables sql, et donc constant tout le long de l'application. De plus ce principe de define constante a partir d'une variable, c'est pas nouveau et je ne suis pas le seul a faire comme ca (cf pas mal de forums, cms et autres).


 
En toute rigueur $table_prefix devrait être une constante aussi dans ce cas. [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1228612
gatsusat
Posté le 22-10-2005 à 08:26:47  profilanswer
 

bob007 a écrit :

gatsuat> Heu ecoute bonhomme, si c'est pour dire ca, tu te la garde ta reflexion. Le $table_prefix est comme son nom l'indique le prefix des tables sql, et donc constant tout le long de l'application. De plus ce principe de define constante a partir d'une variable, c'est pas nouveau et je ne suis pas le seul a faire comme ca (cf pas mal de forums, cms et autres).
 
Omega2> Je pense que c'est toi qui a raison! En changeant l'ordre des inclusions ca devrait marcher, ca serait logique! (atta je test: non pas mieux). La solution est dans cette optique je pense. Merci de m'avoir éclairé !


 
ben en fait je trouve que ca relève d'une règle mathématique toute simple.  
 
CONSTANTE + $Variable = $Variable <=== ben ouais, un truc constant + un truc variable, ca donne toujours quelque chose de variable.
2+X = un truc varaible, sachant que 2 est constant et x variable.
 
CONSTANTE + CONSTANTE = CONSTANTE <== la c'est mieux.
2+2 = 4 un truc CONSTANT.
 
donc autant modifier ta variable et la passer en constante.
ouais je sais je suis chiant, mais c'est juste de la grammaire de programmation. M'enfin s'il y en a qui veulent bien me contredire, il n'y a pas de soucis. et je serai d'accord d'couter


---------------
Les CSS c'est bon mangez-en
n°1228614
gatsusat
Posté le 22-10-2005 à 08:49:21  profilanswer
 

sielfried a écrit :

Met des print_r(get_defined_constants()) un peu partout et regarde à quel moment ta constante est définie et à quel moment elle ne l'est pas/plus.
 
 
En toute rigueur $table_prefix devrait être une constante aussi dans ce cas. [:figti]


 
Ouais mais la rigueur elle existe pas en PHP. C'est un langage tellement permissif, que des boulets vont toujours te contredire en disant qu'ils ont vu ça ailleurs.
 
Je dis pas que ca devrait être un langage Elitiste, mais il pourrait laisser moins de libertés quand même. C'est comme le coup des "$variables", et maintenant du coup on voit très souvent des aberations du genre
 
echo "$variable";
les guillemets n'ont rien à foutre là.


---------------
Les CSS c'est bon mangez-en
n°1228615
gatsusat
Posté le 22-10-2005 à 08:50:16  profilanswer
 

bob007 a écrit :

gatsuat> Heu ecoute bonhomme, si c'est pour dire ca, tu te la garde ta reflexion. Le $table_prefix est comme son nom l'indique le prefix des tables sql, et donc constant tout le long de l'application. De plus ce principe de define constante a partir d'une variable, c'est pas nouveau et je ne suis pas le seul a faire comme ca (cf pas mal de forums, cms et autres).


 
Ben c'est qu'ils ont été mal concus par des gens comme toi  [:petrus75]  


---------------
Les CSS c'est bon mangez-en
n°1228632
omega2
Posté le 22-10-2005 à 10:23:43  profilanswer
 

gatsusat a écrit :

Ouais mais la rigueur elle existe pas en PHP.

C'est pas par ce que le php est permissif que ca empéche d'être rigoureux. Au contraire, plus un langage est permissif plus il faut se montrer rigoureux pour que le code soit maintenable, logique et que ca ne tourne pas au n'importe quoi.
 
Mettre les mauvaise pratiques sur le dos du langage, c'est ce voiler la face : même si le langage permet de mauvaises pratiques, c'est le programmeur qui les mets en place.

n°1228648
gatsusat
Posté le 22-10-2005 à 10:42:50  profilanswer
 

omega2 a écrit :

C'est pas par ce que le php est permissif que ca empéche d'être rigoureux. Au contraire, plus un langage est permissif plus il faut se montrer rigoureux pour que le code soit maintenable, logique et que ca ne tourne pas au n'importe quoi.
 
Mettre les mauvaise pratiques sur le dos du langage, c'est ce voiler la face : même si le langage permet de mauvaises pratiques, c'est le programmeur qui les mets en place.


 
Ben ce que je disais : C'est que les kevins qui font n'importe quoi, ils ne se rendent pas compte qu'il font n'importe quoi, car le langage est permissif.
 
mais justement des gens comme toi et moi, on essaye d'être rigoureux dans ce qu'on fait.


---------------
Les CSS c'est bon mangez-en
n°1228709
bob007
Posté le 22-10-2005 à 13:56:20  profilanswer
 

bon bref je ne pense pas que cela soit le débat du post, car encore une fois cette variable ne change pas, elle pourrait etre constante (et devrait pour les puristes). De la à dire que je suis un boulet parce que je ne suis pas puriste,.... Bref ca m'aide pas du tout ! Merci à ceux qui ont fait avancé le shimlililibiililk

n°1228890
Xav_
The only one...
Posté le 23-10-2005 à 01:31:43  profilanswer
 

bob007 a écrit :

marche pas mieux !
j'ai ajouté cet include avant le if, et aussi explicitement avant la déclaration de la classe (il est inclus par un autre .php normalement)


 
et si tu met ton define en début du fichier de déclaration de la classe (pour etre sur), et ce fichier de déclaration est le tout premier de ta série d'include (histoire d'etre sur que le define est avant la déclaration de la classe, et la déclaration avant l'appel), ça donne quoi ???
 
et puis sans rentrer dans le débat précédent (ça n'apporterait rien de plus), si tu fais vraiment ton define d'une constante (sans la partie variable), le pb persiste ???


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1229315
leflos5
On est ou on est pas :)
Posté le 24-10-2005 à 03:56:22  profilanswer
 

Solution caca: global de ta constante (entre nous ça serait une variable que ça changerait rien... Si le plaisir d'alourdir un truc que tu sais qui ne changera pas autant définir une constante complète plutot que la rafistoler...)
Ou alors un iclude dans ton constructeur mais j'imagine que t'as des variables qui servent partout, donc encore la notion d'indépendance qui revient ;)
 
Sur le principe de la programmation objet, une classe est indépendante du reste donc t'as pas à y foutre des variables ou constantes sorties du placard, même si c'est tentant parce que php est permissif, faut pas ;)
Un constructeur doit avoir tout ce qu'il lui faut pour que la classe travaille tranquillement ;)
 
Et à ce moment là tu nous mets un REGISTER_GLOBAL=On et on en parle plus ;)
 
Tout ce qui rentre dans une classe, rentre par le constructeur et en paramètre point barre! Sauf courtoisies liées au http et autres sessions :D
Et encore une classe devrait être appelée depuis un controleur, l'accès aux données différencié de la génération graphique ;) Les principes de programmation c'est logique mais php permet tellement sans se rendre compte que... :(

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Utiliser une constante définie en dehors d'une classe dans celle-ci

 

Sujets relatifs
[UML] quel design patern utiliser ?pb résolu: utiliser un modéle pour faire plusieurs copies
utiliser qt avec javaUtiliser QT 4.0.1
utiliser un SID dans un scriptComment utiliser Visual Basic .NET?
Comment utiliser Visual Basic .NET?[VB.NET] Utiliser VoIP sous VB.net
Petite classe simple compile sous Visual mais pas g++.utiliser les set en c++
Plus de sujets relatifs à : Utiliser une constante définie en dehors d'une classe dans celle-ci


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR