will warning tam solucion glpi_prever error constant assumed php string

warning - Clase constante en una cadena en PHP



use of undefined constant(this will throw an error in a future version of php) (3)

Mi lectura del manual (el bit justo antes del encabezado de la sección "Acceso y modificación de cadenas por carácter") es que puedes hacer algunos trucos sofisticados con constantes de clase y {} dentro de una cadena, pero no puedes hacer lo simple que haría. Haz que este método devuelva la verdad:

class c { const k = ''12''; public function s() { return "Twelve in decimal is {c::k}."; } }

¿Es la solución correcta aquí para concatenar?


¿Es la solución correcta aquí para concatenar?

Sí. La sintaxis rizada extendida no lo admite.

Alternativamente, puede exportar la lista de constantes a una matriz y usarla (o exportar la constante a un solo nombre de variable escalar), pero esa no es realmente una buena solución IMO.

Tenga en cuenta que las constantes están disponibles, ya que puede hacer esto:

const k = ''foo''; $foo = ''bar''; echo "{${c::k}}"

Dándote bar , pero eso no es lo que quieres.


Es un poco críptico, pero hay una nota al respecto en el manual.

Las funciones, las llamadas de método, las variables de clase estáticas y las constantes de clase dentro de {$} funcionan desde PHP 5. Sin embargo, el valor al que se accede se interpretará como el nombre de una variable en el ámbito en el que se define la cadena. El uso de llaves simples ({}) no funcionará para acceder a los valores de retorno de funciones o métodos o los valores de constantes de clase o variables de clase estáticas.

La última oración le dice que no funcionará, así que sí, la concatenación es el camino a seguir aquí .


(modificado) Ejemplo del párrafo anterior:

<?php class beers { const softdrink = ''rootbeer''; } $rootbeer = ''A & W''; // This works; outputs: I''d like an A & W echo "I''d like an {${beers::softdrink}}/n"; // This won''t work; outputs: I''d like an {beers::softdrink} echo "I''d like an {beers::softdrink}/n";


La sintaxis rizada solo funciona para ''expresiones variables''. Y necesitas algo a lo que puedas acceder con {$ .

Oh, sólo hay esa solución:

$c = "constant"; return "Twelve in decimal is {$c(''c::k'')}.";

Lo que obviamente no es mucho más corto ni más legible que el simple uso de concatenación de cadenas aquí.