PHP-Interpolationszeichenfolge für die Funktionsausgabe

Lesezeit: 2 Minuten

Ryans Benutzeravatar
Ryan

PHP unterstützt Variable Interpolation in doppelten Anführungszeichen, zum Beispiel,

$s = "foo $bar";

Aber ist es möglich, die Ergebnisse von Funktionsaufrufen in der Zeichenfolge in doppelten Anführungszeichen zu interpolieren?

Zum Beispiel,

$s = "foo {bar()}";

Sowas in der Art? Es scheint nicht unmöglich zu sein, oder?

  • ja es ist nicht möglich. Sie können Ihre Antwort einfach durch Ausprobieren erhalten

    – Ibu

    25. Mai 2012 um 17:03 Uhr

  • Meinten Sie interpolieren oder Dolmetschen?

    – hakre

    31. Mai 2012 um 13:09 Uhr

  • Interpolieren ist hier das richtige Wort.

    – Michasaurus

    8. Januar 2020 um 2:05 Uhr

Benutzeravatar von jerseyboy
Trikotjunge

Es ist absolut möglich, die String-to-Function-Name-Aufruftechnik zu verwenden, wie die Antwort von Overv zeigt. In vielen trivialen Substitutionsfällen liest es sich weitaus besser als die alternativen Syntaxen wie z

"<input value="<?php echo 1 + 1 + foo() / bar(); ?>" />"

Sie brauchen eine Variable, weil der Parser erwartet, dass das $ da ist.

Hier funktioniert die Identitätstransformation gut als syntaktischer Hack. Deklarieren Sie einfach eine Identitätsfunktion und weisen Sie den Namen einer Variablen im Geltungsbereich zu:

function identity($arg){return $arg;}
$interpolate = "identity";

Dann können Sie jeden gültigen PHP-Ausdruck als Funktionsargument übergeben:

"<input value="{$interpolate(1 + 1 + foo() / bar() )}" />"

Der Vorteil ist, dass Sie a eliminieren können viel von trivialen lokalen Variablen und Echo Aussagen.

Der Nachteil ist, dass die $interpolate-Variable außerhalb des Gültigkeitsbereichs liegt, sodass Sie sie innerhalb von Funktionen und Methoden wiederholt global deklarieren müssten.

Benutzeravatar von Overv
Übersicht

Die Funktion für doppelte Anführungszeichen in PHP wertet keinen PHP-Code aus, sondern ersetzt einfach Variablen durch ihre Werte. Wenn Sie PHP-Code tatsächlich dynamisch auswerten möchten (sehr gefährlich), sollten Sie verwenden eval:

eval( "function foo() { bar() }" );

Oder wenn Sie nur eine Funktion erstellen möchten:

$foo = create_function( "", "bar()" );
$foo();

Verwenden Sie dies nur, wenn es wirklich keine andere Möglichkeit gibt.

  • Wenn sich die Funktion innerhalb einer Klasse befand, können Sie sie innerhalb einer Zeichenfolge referenzieren, z. B.: $s = "foo {$this->bar()}";

    – nawfal

    9. November 2015 um 10:53 Uhr

  • @nawfal und die {} sind erforderlich. Andernfalls sucht php nach bar Eigentum.

    – Fahmi

    26. August 2020 um 15:35 Uhr

Benutzeravatar von Manju
Manju

Sofern die Interpolation nicht unbedingt erforderlich ist (bitte kommentieren Sie und lassen Sie mich wissen, warum), verketten Sie die Funktionsausgabe mit der Zeichenfolge.

$s =  "foo " . bar();

Quelle: 1.8. Funktionen und Ausdrücke innerhalb von Strings interpolieren

  • Ok, aber eigentlich beantwortet das die Frage nicht 😉

    – Blackbam

    2. Februar 2017 um 22:06 Uhr

  • Nein, aber es gibt die richtige Lösung für das zugrunde liegende Problem, das darin besteht, eine Zeichenfolge zu erstellen, die sowohl aus Literalteilen als auch aus Ausdrücken besteht.

    – Michasaurus

    8. Januar 2020 um 2:05 Uhr

1430600cookie-checkPHP-Interpolationszeichenfolge für die Funktionsausgabe

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy