Aller au contenu

define / const


Sujets conseillés

Posté

Bonjour,

Je tente de mettre un define ou un const dans ma classe mais j'obtiens une erreur :

parse error, expecting 'T_OLD_FUNCTION' or 'T_FUNCTION...

je ne vois pas pourquoi on ne pourrais pas utiliser l'un ou l'autre ?

merci de votre aide.

Posté

Salut,

pourrais-tu préciser la version de php que tu utilise, et aussi le bout de script qui "coince".

Les fonctions "const" et "define" ne peuvent (si je ne dit pas de bétise) être utilisé qu'au tout début de ta classe (aprés sa déclaration)

@+ oxyd-x

Posté

Voilà :

class acces

{

const ACCES_REFUS = 1;

que ce soit ca ou :

class acces

{

define("ACCES_REFUS", 1);

PHP Version 4.3.11

Posté

Pour la première, je ne connaissais pas, pour la seconde, il y a de fortes chances qu'il prenne la valeur '1' comme un booléen, ce qui sous entendrait : ACCES_REFUS = TRUE. Essaies de faire plutot :

define("ACCES_REFUS", "1");

ca devrait marcher ainsi.

Posté

Ca fait pareil, apparement on est obligé de le faire hors classe, ce que je trouve génant car les variables définies ne doivent avoir que la classe comme portée, vu que ces variables me permettent de définir les erreurs engendrés au sein de ma classe.

Posté

N'utilises pas des constantes, mais des variables normales, pour ce genre de boulot.

Tu peux aussi créer une autre classe, que tu pourras exporter dans un autre objet, ainsi les variables spécifiques à la classe seront... spécifiques à la classe..

Mais sais tu qu'une variable affectée à une classe n'est pas visible de l'extérieur de l'objet ?

Si tu définis une variable dans la classe, elle ne pourra interférer avec une autre variable, de même nom, comprise dans le programme, hors classe ?

Posté
N'utilises pas des constantes, mais des variables normales, pour ce genre de boulot.

Tu peux aussi créer une autre classe, que tu pourras exporter dans un autre objet, ainsi les variables spécifiques à la classe seront... spécifiques à la classe..

Mais sais tu qu'une variable affectée à une classe n'est pas visible de l'extérieur de l'objet ?

Si tu définis une variable dans la classe, elle ne pourra interférer avec une autre variable, de même nom, comprise dans le programme, hors classe ?

<{POST_SNAPBACK}>

Si je souhaite mettre mes variables dans la classe c'est simplement pour les utiliser dans la classe et donc ne pas être visible de l'extérieur, c'est simplement pour les tests dans mes méthodes.

si par exemple j'ai "un acces refusé" j'utilise alors sa valeur attribué pour accéder au tableau des mes messages d'erreur et ainsi l'afficher.

Voilà pourquoi je ne voulais pas mettre des variables classique.

mais si je me retrouve obligé...

Posté

Bon ben voilà que je tombe de nouveau sur quelque chose d'étrange avec les classes, apparement on ne peut pas faire ceci :

class acces

{

var $cnx;

var $err_AccesRefuse = 1;

var $errorMsg[1]='t';

il refuse le tableau fourni, que l'index soit un chiffre ou une variable j'obtiens :

Parse error, expecting ',' or ';' .... sur la ligne du tableau, si je commente la ligne alors pas d'erreur.

Posté (modifié)

"L'auto-déclaration" de tableaux ne fonctionnent pas dans les class, en tout cas pas sous PHP4 (je n'ai jamais testé cela sous PHP5...un petit tour dans le manuel s'impose peut-être)...

Déclare ta variable ainsi :

var $errorMsg=array(1 => 't');

Pour le premier problème, apparemment PHP4 ne permet pas de déclaration de constantes de classe... alors que PHP5 selon le manuel lui as cette possibilité : http://php.benscom.com/manual/fr/language.oop5.constants.php

Je vais faire quelques recherches et je te redirais... mais garde bien en tête que c'es seulement depuis PHP5 que on considère PHP comme un language réellement orienté objet... PHP4 incluait une bonne partie du modèle objet mais c'était assez incomplet...

**EDIT** C'est bien ce que je pensais...

Trouvé dans le manuel PHP, dans les commentaires des utilisateurs :

---[Editor's Note]---

As of PHP 5.0.0 this is possible. You can define class-only constants, which can be called like Foo::Constant1 from the outside

---[End Note]---

Please keep in mind that

class AClass {

  define ("Const1", "Value1");

  ... }

didn't work. You have to make all your constant definitions before you open the class. So

define ("Const1", "Value1");

class AClass {

  ... }

would be correct.

Cela signifie pour les "non-shakespeariens", que PHP4 ne permet pas les déclaration de constantes de classe, mais c'est possible depuis PHP 5.0.0 ...pour toutefois utiliser des constantes avec une classe il suffit de les déclarer AVANT la classe en question, elle seront toutesfois accessible sans instancier la classe... mais ça peut être un mal nécessaire...on peu aussi tout simplement passer par une variable, mais c'est du bricolage pour un projet de grande envergure...

Modifié par TheRec
Posté
"L'auto-déclaration" de tableaux ne fonctionnent pas dans les class, en tout cas pas sous PHP4 (je n'ai jamais testé cela sous PHP5...un petit tour dans le manuel s'impose peut-être)...

Déclare ta variable ainsi :

var $errorMsg=array(1 => 't');

Pour le premier problème, apparemment PHP4 ne permet pas de déclaration de constantes de classe... alors que PHP5 selon le manuel lui as cette possibilité : http://php.benscom.com/manual/fr/language.oop5.constants.php

Je vais faire quelques recherches et je te redirais... mais garde bien en tête que c'es seulement depuis PHP5 que on considère PHP comme un language réellement orienté objet... PHP4 incluait une bonne partie du modèle objet mais c'était assez incomplet...

**EDIT** C'est bien ce que je pensais...

Trouvé dans le manuel PHP, dans les commentaires des utilisateurs :

Cela signifie pour les "non-shakespeariens", que PHP4 ne permet pas les déclaration de constantes de classe, mais c'est possible depuis PHP 5.0.0 ...pour toutefois utiliser des vaitables avec une classe il suffit de les déclarer AVANT la classe en question, elle seront toutesfois accessible sans instancier la classe... mais ça peut être un mal nécessaire...on peu aussi tout simplement passer par une variable, mais c'est du bricolage pour un projet de grande envergure...

<{POST_SNAPBACK}>

Merci pour tes réponses.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...