PHP statische Variablen in doppelte Anführungszeichen
Frage
Wie kann ich PHP eine statische Variable in doppelten Anführungszeichen zu bewerten?
Ich möchte etwas tun:
log("self::$CLASS $METHOD entering");
Ich habe alle Arten von {} Combos versucht, den variablen Wert von self :: $ CLASS zu bekommen, aber nichts hat funktioniert. Ich habe zur Zeit mit String-Verkettung angesiedelt, aber es ist ein Schmerz zu geben:
log(self::$CLASS . " $METHOD entering");
Lösung
Sie können leider nicht tun. Es funktioniert nur für einfache Ausdrücke. Siehe hier .
Andere Tipps
Leider gibt es keine Möglichkeit, wie dies noch zu tun. Beispiel in einen der Antworten hier wird nicht funktionieren, weil {${self::$CLASS}}
nicht Inhalt von self::$CLASS
zurückgibt, wird aber kehrt Inhalt der Variablen mit dem Namen in self::$CLASS
.
Hier ist ein Beispiel, das nicht zurückkehrt myvar
tut, aber aaa
:
$myvar = 'aaa';
self::$CLASS = 'myvar';
echo "{${self::$CLASS}}";
Ich weiß nicht, die Antwort auf Ihre Frage, aber Sie können die Klassennamen und Verfahren zeigen die Verwenden Sie eine anonyme Identitätsfunktion in einer Variablen gespeichert. Auf diese Weise können (Ich bin mit Klassenkonstanten in diesem Beispiel aber dies funktionieren wird mit statischen Variablen zu). __METHOD__
mit
$
unmittelbar nach {
haben:
$I = function($v) { return $v; };
$interpolated = "Doing {$I(self::FOO)} with {$I(self::BAR)}";
Nur mit der Verkettung leben. Sie würden überrascht sein, wie ineffizient Variableninterpolation in Strings können werden.
Und während dies unter dem Dach der Voroptimierung oder Mikro-Optimierung fallen könnte, ich glaube einfach nicht gewinnen Sie eigentlich jede Eleganz in diesem Beispiel.
Persönlich, wenn ich werde eine kleine Optimierung machen oder die anderes, und meine Entscheidungen sind „schneller“ und „einfacher geben“ - Ich werde wählen „schneller“. Weil Sie es nur ein paar Mal geben, aber es ist wahrscheinlich tausende Male geht auszuführen.
Ich weiß, dass dies eine alte Frage, aber ich finde es seltsam, dass niemand noch die [sprintf][1]
Funktion vorgeschlagen hat.
sagen:
<?php
class Foo {
public static $a = 'apple';
}
Sie würden es mit verwenden:
echo sprintf( '$a value is %s', Foo::$a );
so auf Ihrem Beispiel seiner:
log(
sprintf ( ' %s $METHOD entering', self::$CLASS )
);
Ja, das kann getan werden:
log("{${self::$CLASS}} $METHOD entering");