variables estáticas de PHP entre comillas dobles
Pregunta
¿Cómo puedo obtener PHP para evaluar una variable estática entre comillas dobles?
Quiero hacer algo como esto:
log("self::$CLASS $METHOD entering");
He intentado todo tipo de combos {} para obtener el valor de la variable de self :: $ clase, pero nada ha funcionado. Actualmente me he adaptado con la concatenación de cadenas, pero es un dolor que escribir:
log(self::$CLASS . " $METHOD entering");
Solución
En este momento, no se puede hacer eso. Sólo funciona para las expresiones simples. Ver aquí .
Otros consejos
Por desgracia, no hay manera de cómo hacer esto todavía. Ejemplo de una de las respuestas que aquí no va a funcionar, porque {${self::$CLASS}}
no devuelve el contenido de self::$CLASS
, sino que el contenido de los rendimientos variables con nombre en self::$CLASS
.
Este es un ejemplo, que no vuelve myvar
, pero aaa
:
$myvar = 'aaa';
self::$CLASS = 'myvar';
echo "{${self::$CLASS}}";
No sé la respuesta a su pregunta, pero se puede mostrar el nombre de la clase y el método mediante el __METHOD__
magia constante .
Utilice una función de identidad anónima almacenada en una variable. De esta manera usted tendrá $
inmediatamente después {
:
$I = function($v) { return $v; };
$interpolated = "Doing {$I(self::FOO)} with {$I(self::BAR)}";
(estoy usando constantes de clase en este ejemplo, pero esto va a funcionar con variables estáticas también).
Solo vive con la concatenación. Usted se sorprendería de lo ineficiente interpolación de variables en cadenas se pueden .
Y si bien esto podría caer bajo el paraguas de pre-optimización o micro-optimización, sólo que no creo que realmente ganar cualquier elegancia en este ejemplo.
En lo personal, si voy a hacer una pequeña optimización de uno u otro, y mis opciones son "más rápido" y "fácil de escribir" - Voy a elegir "más rápido". Debido a que sólo escribe un par de veces, pero que probablemente va a ejecutar miles de veces.
Sé que esto es una vieja pregunta, pero me parece extraño que nadie ha sugerido la función [sprintf][1]
todavía.
decir:
<?php
class Foo {
public static $a = 'apple';
}
se usaría con:
echo sprintf( '$a value is %s', Foo::$a );
así que en su ejemplo, su:
log(
sprintf ( ' %s $METHOD entering', self::$CLASS )
);
Si esto se puede hacer:
log("{${self::$CLASS}} $METHOD entering");