PHP variables statiques dans des guillemets doubles
Question
Comment puis-je obtenir PHP pour évaluer une variable statique entre guillemets?
Je veux faire quelque chose comme ceci:
log("self::$CLASS $METHOD entering");
J'ai essayé toutes sortes de combos {} pour obtenir la valeur de la variable de l'auto :: CLASSE $, mais rien n'a fonctionné. Je suis actuellement installé avec concaténation de chaîne, mais il est une douleur de type:
log(self::$CLASS . " $METHOD entering");
Autres conseils
Malheureusement, il n'y a aucun moyen comment faire encore. Exemple dans l'une des réponses ici ne fonctionnera pas, car {${self::$CLASS}}
ne retourne le contenu de self::$CLASS
, mais les retours contenu de la variable avec le nom self::$CLASS
.
Voici un exemple qui ne myvar
le rendement, mais aaa
:
$myvar = 'aaa';
self::$CLASS = 'myvar';
echo "{${self::$CLASS}}";
Je ne connais pas la réponse à votre question, mais vous pouvez afficher le nom de la classe et la méthode utilisant le Utilisez une fonction d'identité anonyme stockée dans une variable. De cette façon, vous aurez (J'utilise des constantes de classe dans cet exemple, mais cela va fonctionner avec des variables statiques aussi). __METHOD__
$
immédiatement après {
:
$I = function($v) { return $v; };
$interpolated = "Doing {$I(self::FOO)} with {$I(self::BAR)}";
Il suffit de vivre avec la concaténation. Vous seriez surpris de voir comment l'interpolation de variables inefficace les chaînes peuvent être .
Et alors que cela pourrait tomber sous l'égide de pré-optimisation ou micro-optimisation, je ne pense pas que vous gagnez en fait une élégance dans cet exemple.
Personnellement, si je vais faire une petite optimisation d'un ou l'autre, et mes choix sont « plus rapide » et « plus facile à taper » - Je vais choisir « plus vite ». Parce que vous tapez seulement quelques fois, mais il va probablement exécuter des milliers de fois.
Je sais que c'est une vieille question, mais je trouve étrange que Noone a suggéré encore la fonction [sprintf][1]
.
dire:
<?php
class Foo {
public static $a = 'apple';
}
vous pouvez utiliser avec:
echo sprintf( '$a value is %s', Foo::$a );
sur votre exemple son:
log(
sprintf ( ' %s $METHOD entering', self::$CLASS )
);
Oui, cela peut être fait:
log("{${self::$CLASS}} $METHOD entering");