Après quelques recherches dans la doc de PHP, j'ai tout de même une
question à poser qui est bête mais qui me surprend quand même.
Je ne vois pas mon erreur qui je pense est très simple, voire basique
(je dois avoir loupé quelque chose...).
J'ai crée une classe dans laquelle je veux mettre une constante (ou un
attribut static).
Jusque là pas de problème, seulement essayez-ce code :
<?php
class Test {
const PATH = dirname(__FILE__);
//const PATH = __FILE__; // fonctionne très bien
//public static $PATH = dirname(__FILE__); // fait aussi planter...
function __construct()
{
// blah blah
}
public static function getPath()
{
echo self::PATH;
}
}
// pour tester la classe Test
Test::getPath();
?>
Cette classe de "Test" n'à aucun intérêt, mais là n'est pas le
problème. Elle est simple mais il n'empêche qu'elle ne fonctionne pas
!
Erreur :
Parse error: parse error, unexpected '(', expecting ',' or ';' in
C:\Program Files\Apache Group\Apache2\htdocs\web\test.php on line 3
Je l'ai simplifiée pour l'exemple...
Quelqu'un peut-il m'expliquer pourqoi dans une constante je ne peux pas
utiliser le dirname avec le __FILE__ ?
Je dois être aveugle, ou alors j'ai mal lu la doc...
Merci d'avance de m'éclaircir sur un sujet si bête,
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Antoine Polatouche
wrote:
Parse error: parse error, unexpected '(', expecting ',' or ';' in C:Program FilesApache GroupApache2htdocswebtest.php on line 3
Je l'ai simplifiée pour l'exemple... Quelqu'un peut-il m'expliquer pourqoi dans une constante je ne peux pas utiliser le dirname avec le __FILE__ ? Je dois être aveugle, ou alors j'ai mal lu la doc...
Merci d'avance de m'éclaircir sur un sujet si bête,
dirname(__FILE__) n'est pas une constante: dans la doc:
Please note, that it is not possible to initialize an object's constant with a not-constant value. Something like this won't work:
<?php
class Testing { const TIME = time();
// Some useful code }
edouard.guerin@gmail.com wrote:
Parse error: parse error, unexpected '(', expecting ',' or ';' in
C:Program FilesApache GroupApache2htdocswebtest.php on line 3
Je l'ai simplifiée pour l'exemple...
Quelqu'un peut-il m'expliquer pourqoi dans une constante je ne peux pas
utiliser le dirname avec le __FILE__ ?
Je dois être aveugle, ou alors j'ai mal lu la doc...
Merci d'avance de m'éclaircir sur un sujet si bête,
dirname(__FILE__) n'est pas une constante:
dans la doc:
Please note, that it is not possible to initialize an object's constant
with a not-constant value. Something like this won't work:
Parse error: parse error, unexpected '(', expecting ',' or ';' in C:Program FilesApache GroupApache2htdocswebtest.php on line 3
Je l'ai simplifiée pour l'exemple... Quelqu'un peut-il m'expliquer pourqoi dans une constante je ne peux pas utiliser le dirname avec le __FILE__ ? Je dois être aveugle, ou alors j'ai mal lu la doc...
Merci d'avance de m'éclaircir sur un sujet si bête,
dirname(__FILE__) n'est pas une constante: dans la doc:
Please note, that it is not possible to initialize an object's constant with a not-constant value. Something like this won't work:
<?php
class Testing { const TIME = time();
// Some useful code }
FightClub!
Quelqu'un peut-il m'expliquer pourqoi dans une constante je ne peux pas utiliser le dirname avec le __FILE__ ?
Cela n'a rien à voir ni avec le dirname ni avec le fait que la variable soit constante ou non. Ce qui n'est pas possible c'est d'utiliser autre chose qu'une constante pour donner une valeur à la variable dans l'objet lui-même. La seule solution pour utiliser une expression plutôt qu'une constante c'est d'instancier l'objet, c'est à dire d'affecter la valeur dans le constructeur.
Suis-je clair ?
Quelqu'un peut-il m'expliquer pourqoi dans une constante je ne peux pas
utiliser le dirname avec le __FILE__ ?
Cela n'a rien à voir ni avec le dirname ni avec le fait que la variable
soit constante ou non.
Ce qui n'est pas possible c'est d'utiliser autre chose qu'une constante
pour donner une valeur à la variable dans l'objet lui-même.
La seule solution pour utiliser une expression plutôt qu'une constante
c'est d'instancier l'objet, c'est à dire d'affecter la valeur dans le
constructeur.
Quelqu'un peut-il m'expliquer pourqoi dans une constante je ne peux pas utiliser le dirname avec le __FILE__ ?
Cela n'a rien à voir ni avec le dirname ni avec le fait que la variable soit constante ou non. Ce qui n'est pas possible c'est d'utiliser autre chose qu'une constante pour donner une valeur à la variable dans l'objet lui-même. La seule solution pour utiliser une expression plutôt qu'une constante c'est d'instancier l'objet, c'est à dire d'affecter la valeur dans le constructeur.
Suis-je clair ?
Kevin
Bonjour à tous,
Salut,
Merci d'avance de m'éclaircir sur un sujet si bête,
essaye:
define("PATH",dirname(__FILE__));
Kevin
Bonjour à tous,
Salut,
Merci d'avance de m'éclaircir sur un sujet si bête,
Merci d'avance de m'éclaircir sur un sujet si bête,
essaye:
define("PATH",dirname(__FILE__));
Kevin
Reno
Parcequ'une constante de class ne peut pas être initialisée par un appel à une fonction (dirname() en l'occurence).
Comme les methodes statiques, celles-ci sont résolues au moment de la compilation. Il n'est donc pas possible d'utiliser le résultat d'une fonction (qui se fait de manière dynamique lors de l'éxécution)
Doc php: "The value must be a constant expression, not (for example) a variable, a class member, result of a mathematical operation or a function call."
Parcequ'une constante de class ne peut pas être initialisée par un
appel à une fonction (dirname() en l'occurence).
Comme les methodes statiques, celles-ci sont résolues au moment de la
compilation. Il n'est donc pas possible d'utiliser le résultat d'une
fonction (qui se fait de manière dynamique lors de l'éxécution)
Doc php: "The value must be a constant expression, not (for example) a
variable, a class member, result of a mathematical operation or a
function call."
Parcequ'une constante de class ne peut pas être initialisée par un appel à une fonction (dirname() en l'occurence).
Comme les methodes statiques, celles-ci sont résolues au moment de la compilation. Il n'est donc pas possible d'utiliser le résultat d'une fonction (qui se fait de manière dynamique lors de l'éxécution)
Doc php: "The value must be a constant expression, not (for example) a variable, a class member, result of a mathematical operation or a function call."
edouard.guerin
Merci à vous tous,
Maintenant je comprend pourquoi la syntaxe ne fonctionne pas, je trouverai donc une autre syntaxe :-) Ca m'apprendra de lire la doc française et non la doc anglaise...
Edouard
Merci à vous tous,
Maintenant je comprend pourquoi la syntaxe ne fonctionne pas, je
trouverai donc une autre syntaxe :-)
Ca m'apprendra de lire la doc française et non la doc anglaise...
Maintenant je comprend pourquoi la syntaxe ne fonctionne pas, je trouverai donc une autre syntaxe :-) Ca m'apprendra de lire la doc française et non la doc anglaise...