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");
¿Fue útil?

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");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top