Variablenname anhand der RÜckgabe einer Funktion festlegen

Wie das Ergebnis einer Funktion als Name für eine Variable in PHP verwendet werden kann

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


Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0