¿Hay alguna manera en PHP de incluir una constante en una cadena sin concatenar?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
php
string
constants
concatenation
Brian
fuente
fuente
Respuestas:
No.
Con Strings, PHP no puede distinguir los datos de cadena aparte de los identificadores constantes. Esto se aplica a cualquiera de los formatos de cadena en PHP, incluido heredoc.
constant()
es una forma alternativa de obtener una constante, pero tampoco se puede poner una llamada de función en una cadena sin concatenación.Manual de constantes en PHP
fuente
define('ANIMAL','turtles'); $constant='constant'; echo "I like {$constant('ANIMAL')}";
Sí lo es (de alguna manera;)):
Probablemente esto no sea lo que buscabas, pero creo que, técnicamente, esto no es concatenación sino una sustitución y, desde este supuesto, incluye una constante en una cadena sin concatenación .
fuente
Para usar constantes dentro de cadenas, puede usar el siguiente método:
¿Como funciona esto?
Puede usar cualquier nombre de función de cadena y parámetros arbitrarios
Se puede colocar cualquier nombre de función en una variable y llamarlo con parámetros dentro de una cadena entre comillas dobles. Funciona con múltiples parámetros también.
Produce
Funciones anónimas también
También puede usar funciones anónimas siempre que ejecute PHP 5.3+.
Produce html correctamente escapado como se esperaba.
Matrices de devolución de llamada no permitidas!
Si ahora tiene la impresión de que el nombre de la función puede ser invocable, ese no es el caso, ya que una matriz que devuelve verdadero cuando se pasa a
is_callable
causaría un error fatal cuando se usa dentro de una cadena:Tenga en cuenta
Esta práctica es desaconsejada, pero a veces da como resultado un código mucho más legible, por lo que depende de usted; la posibilidad está ahí.
fuente
$_ = create_function('$a','return $a;'); $s = "I like {$_(ANIMAL)}"
. La versión de Thetaiko elimina la necesidad de citas, y un guión bajo es lindo.fuente
fuente
Si realmente quieres hacer eco constante sin concatenación, aquí hay una solución:
nota : en este ejemplo echo toma una serie de parámetros ( mira las comas ), por lo que no es una concatenación real
Echo se comporta como una función, toma más parámetros, es más eficiente que la concatenación, ya que no tiene que concatenar y luego hacer eco, solo hace eco de todo sin la necesidad de crear un nuevo objeto concatenado String :))
EDITAR
Además, si considera concatenar cadenas, pasar cadenas como parámetros o escribir cadenas completas con " , The , (versión de coma) siempre es más rápido, el siguiente va . (Concatenación con ' comillas simples) y el método de construcción de cadenas más lento es usar comillas dobles " , porque las expresiones escritas de esta manera tienen que ser evaluadas contra variables y funciones declaradas.
fuente
Podrías hacerlo:
fuente
La forma más fácil es
Otra forma de usar
(s)printf
fuente
Como otros han señalado, no puedes hacer eso. PHP tiene una función
constant()
que no se puede llamar directamente en una cadena, pero podemos solucionarlo fácilmente.y un ejemplo básico sobre su uso:
fuente
$constant = 'constant';
lugar de definir otra función, y funcionaría de manera idéntica ya que esa función ya existe.Aquí hay algunas alternativas a las otras respuestas, que parecen centrarse principalmente en el truco "{$}". Aunque no se hacen garantías sobre su velocidad; Todo esto es azúcar sintáctica pura. Para estos ejemplos, asumiremos que se definió el conjunto de constantes a continuación.
Usando extract ()
Este es bueno porque el resultado es idéntico a las variables. Primero crea una función reutilizable:
Luego llámalo desde cualquier ámbito:
Aquí, pone en minúsculas las constantes para que sean más fáciles con los dedos, pero puede eliminar el array_change_key_case () para mantenerlas como están. Si ya tiene nombres de variables locales en conflicto, las constantes no los anularán.
Uso de reemplazo de cadena
Este es similar a sprintf (), pero usa un token de reemplazo único y acepta un número ilimitado de argumentos. Estoy seguro de que hay mejores maneras de hacerlo, pero perdona mi torpeza y trata de concentrarte en la idea detrás de esto.
Como antes, crea una función reutilizable:
Luego llámalo desde cualquier ámbito:
Puede usar cualquier token de reemplazo que desee, como un% o #. Usé la barra oblicua aquí porque es un poco más fácil de escribir.
fuente
Es divertido que pueda usar la palabra clave 'const' como nombre para su función para evitar la basura del espacio de nombres:
También puede usar $ GLOBALS para propagar la función 'const' en todo el código:
No estoy seguro de si es seguro usarlo en el futuro. Y lo que es peor: todavía se ve feo.
fuente
Creo que esto responde a la pregunta original del OP. Lo único es que la clave de índice global parece funcionar solo en minúsculas.
Salida:
fuente
an associative array containing references to all variables
.$db_user = 'root';