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");
Était-ce utile?

La solution

Désolé, vous ne pouvez pas faire cela. Il ne fonctionne que pour des expressions simples. Voir .

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}}";

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");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top