Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Une constante capricieuse

6 réponses
Avatar
edouard.guerin
Bonjour à tous,

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,

Edouard

6 réponses

Avatar
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
}

Avatar
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 ?

Avatar
Kevin

Bonjour à tous,


Salut,

Merci d'avance de m'éclaircir sur un sujet si bête,


essaye:

define("PATH",dirname(__FILE__));


Kevin

Avatar
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."
Avatar
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
Avatar
Kevin
Je reviens à charge...

Ca, ça marche !!!!!

<?php
define("PATH",dirname(__FILE__));
print PATH;
?>

Kevin