sé que puede crear constantes globales en términos de diferencia usando la concatenación de cadenas:¿Puedo usar la concatenación de cadenas para definir una clase CONST en PHP?
define('FOO', 'foo');
define('BAR', FOO.'bar');
echo BAR;
imprimirá 'parametro'.
Sin embargo, me sale un error al intentar hacer lo mismo con las constantes de clase.
class foobar {
const foo = 'foo';
const foo2 = self::foo;
const bar = self::foo.'bar';
}
foo2 se define sin ningún problema, pero declarando barra CONST error cabo
Parse error: syntax error, unexpected '.', expecting ',' or ';'
También he intentado usar funciones como sprintf() pero no le gustan los paréntesis de la izquierda más de lo el concatenador de cuerdas '.'.
Entonces, ¿hay alguna forma de crear constantes de clase en términos de cada una en algo más que un caso de conjunto trivial como foo2?
No entiendo la razón de diferente comportamiento del colocador entre constantes globales y constantes de clase. Creo que visitaré bugs.php.net en breve :) Pero a corto plazo, probablemente solo moveré las constantes fuera de la clase y luego las copiaré en la clase. Así que kludgy! – selfsimilar
bug.php.net básicamente me dijo que no lo arreglarían. "Esta es una limitación en la implementación. Para la constante de clase necesitamos un valor constante en tiempo de compilación y no podemos evaluar expresiones. Define() es una función regular, evaluada en tiempo de ejecución y por lo tanto puede contener cualquier valor de cualquier forma cambiando esto significaría agregar una fase de ejecución en el compilador ... " que en realidad es BS, como funciona el siguiente código: define ('BAR', ThisWorks :: foo. 'Bar'); clase ThisWorks { const foo = 'foo'; const bar = BAR; } echo ThisWorks :: bar; esto generará 'foobar' sin ningún error. – selfsimilar
Para cualquier otra persona que lo busque, el error es [# 42355] (https://bugs.php.net/bug.php?id=42355). –