El problema en su declaración de la clase no es que está utilizando una constante, sino que está utilizando una expresión.
Las variables de miembro de clase se denominan "propiedades". (...) Se definen utilizando una de las palabras clave public, protected o private, seguida de una declaración de variable normal. Esta declaración puede incluir una inicialización,
, pero esta inicialización debe ser un valor constante, es decir, debe poder evaluarse en tiempo de compilación y no debe depender de la información del tiempo de ejecución para poder ser evaluada.
Esta simple declaración, por ejemplo, no se compilará (error de análisis):
class MyClass{
private $myvar = 3+2;
}
Pero si alteramos su declaración de la clase a utilizar la constante simple, en lugar de una cadena concatenada con esa constante que lo hará trabajar como se espera
class MyClass{
const myconst = 'somevalue';
public $myvar = array(0 => self::myconst);
}
$obj = new MyClass();
echo $obj->myvar[0];
Como solución alternativa se podría inicializar las propiedades en el constructor:
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];
espero que esto le ayuda,
Alin
si está buscando algo así como una macro C, PHP no funciona de esa manera. además, no hay "tiempo de compilación". PHP es un intérprete. – stillstanding
Las personas que escribieron el manual parecen tener la impresión de que hay un "tiempo de compilación". http://www.php.net/manual/en/language.oop5.properties.php –
Hay un "tiempo de compilación" (más o menos), ya que los internos de PHP convierten el código de texto a bytecode. Ver http://sebastian-bergmann.de/archives/868-PHP-Compiler-Internals.html – Antoine