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");
War es hilfreich?

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

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");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top