Le problème dans votre déclaration de classe ne sont pas que vous utilisez une constante, mais que vous utilisez une expression.
Les variables de membre de classe sont appelées "propriétés". (...) Ils sont définis en utilisant l'un des mots-clés public, protected ou private, suivi d'une déclaration de variable normale. Cette déclaration peut inclure une initialisation,
mais cette initialisation doit être une valeur constante - c'est-à-dire qu'elle doit pouvoir être évaluée au moment de la compilation et ne doit pas dépendre des informations d'exécution pour être évaluée.
Cette déclaration simple, par exemple, ne compilera pas (erreur d'analyse):
class MyClass{
private $myvar = 3+2;
}
Mais si nous modifions votre déclaration de classe à utiliser la constante simple, plutôt que d'une chaîne concaténée avec cette constante, il sera fonctionne comme prévu.
class MyClass{
const myconst = 'somevalue';
public $myvar = array(0 => self::myconst);
}
$obj = new MyClass();
echo $obj->myvar[0];
En tant que travail autour de vous pouvez initialiser vos propriétés dans le constructeur:
class MyClass{
const myconst = 'somevalue';
public $myvar;
public function __construct(){
$this->myvar = array(0 => 'do something with '.self::myconst);
}
}
$obj = new MyClass();
echo $obj->myvar[0];
J'espère que cela vous aide,
Alin
Si vous cherchez quelque chose comme une macro C, PHP ne fonctionne pas de cette façon. d'ailleurs, il n'y a pas de "temps de compilation". PHP est un interprète. – stillstanding
Les personnes qui ont écrit le manuel semblent avoir l'impression qu'il y a un "temps de compilation". http://www.php.net/manual/en/language.oop5.properties.php –
Il y a un "temps de compilation" (sorte de), puisque les internes de PHP convertissent le code texte en bytecode. Voir http://sebastian-bergmann.de/archives/868-PHP-Compiler-Internals.html – Antoine