1. Erläuterungen
Der Name von Variablen kann in Abhängigkeit vom Rückgabewert einer Funktion festgelegt werden.
Die Syntax dafür lautet
PHP-Code
${ foo() } = ...;
wobei foo() eine beliebige Funktion ist, die einen Wert zurückgeben muss, der ein String ist oder sich zumindest in einen String umwandeln lässt.
(Es darf übrigens selbst ein leerer String zurückgegeben werden.)
2. Beispiel: Einfacher Rückgabewert
In diesem Beispiel gibt die Funktion foo() den Namen der Variable zurück, welcher „bar” ist.
Dieser Variable wird der Wert „test” zugewiesen.
PHP-Code
<?php
function foo() {
return 'bar';
}
${foo()} = 'test';
var_dump( ${foo()}, $bar );
?>
HTML-Code: Ausgabe
string(4) "test"
string(4) "test"
3. Beispiel: Komplexere Verkettung
Die Zuweisung kann auch „indirekter” erfolgen.
Im nachfolgenden Beispiel wird an foo() eine Callback-Funktion übergeben, welche wiederum den Wert von $test zurückgibt, der wiederum „st” ist.
foo() verknüpft diesen String mit „te” am Anfang, wodurch sich „test” ergibt.
Der Variable mit dem Namen „test” wird anschließend der Inhalt „neuer Wert” zugewiesen.
PHP-Code
<?php
$test = 'st';
function foo($callback) {
// $callback() ergibt 'st'
return 'te' . $callback();
}
$callback = function() use ($test) {
return $test;
};
${foo($callback)} = 'neuer wert';
var_dump($test);
?>
HTML-Code: Ausgabe
string(10) "neuer wert"
4. Beispiel: Monate mit Übersetzung
Das nachfolgende Beispiel durchläuft alle Monate (auf Englisch) und weist den gleichnamigen Variablen die deutsche Übersetzung zu.
Am Ende erhält man die Variablen $january, $february, $march usw., welche die Werte „Januar”, „Februar”, „Maerz” usw. enthalten.
PHP-Code
<?php
function translateMonth($lang, $month) {
if ($lang === 'de') {
// deutsche Übersetzungen
switch ($month) {
case 1: return 'Januar';
case 2: return 'Februar';
case 3: return 'Maerz';
// ...
}
} else if ($lang === 'fr') {
// hier könnten die französischen Übersetzungen stehen
// ...
} else {
// englische Standardwerte
// werden in diesem Beispiel nicht verwendet
switch ($month) {
case 1: return 'January';
case 2: return 'February';
case 3: return 'March';
// ...
}
}
}
foreach (range(1, 12) as $month) {
// der Teil zwischen den geschweiften Klammern ergibt den Monat mit Nummer $month
// in Englisch und klein geschrieben
${ strtolower(date('F', mktime(0, 0, 0, $month, 1, 1970))) } = translateMonth('de', $month);
}
echo('Translated months: ' . $january . ', ' . $february .', ' . $march);
?>
HTML-Code: Ausgabe
Translated months: Januar, Februar, Maerz