Heute bin ich auf dieses kleine PHP-Juwel namens variable Variablen gestoßen .
$literal = "Hello";
$vv = "literal";
echo $$vv; // => prints "Hello"
Gibt es tatsächlich Anwendungsfälle für diese Sprachfunktion?
Heute bin ich auf dieses kleine PHP-Juwel namens variable Variablen gestoßen .
$literal = "Hello";
$vv = "literal";
echo $$vv; // => prints "Hello"
Gibt es tatsächlich Anwendungsfälle für diese Sprachfunktion?
Antworten:
Angenommen, eine URL von http://example.com/hello/world
und die folgenden .htaccess
:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ router.php?/$1 [L]
router.php
, ein zu simpler Router, wäre:
<?php
$request = explode("/", $_SERVER["REQUEST_URI"]);
$controllerClass = $request[0];
$controllerActionMethod = $request[1];
$controller = new $controllerClass();
$controller->$controllerActionMethod(); // hello::world();
?>
Das ist eine ziemlich übliche praktische Verwendung variabler Variablen. Ordentlicher Trick, aber Sie sollten äußerst vorsichtig sein, wenn Sie ihn verwenden. Übermäßiger / Missbrauch führt mit Sicherheit zu schrecklich nicht wartbarem Code.
Haftungsausschluss: Der in der Antwort angegebene Code soll nur die Verwendung der Funktion veranschaulichen. Es behandelt nicht das richtige Design, die Sicherheit, die Wartbarkeit oder die Vernunft. Verwende nicht.
.htaccess
, aber ich verstehe das auch nicht gut.
$controller
ist eine Variable (die Struktur), aber was sie enthält, wird dynamisch gesetzt, also eine variable Variable. Ein dummer Name, nicht wahr?
Ehrlich? In fast 10 Jahren PHP-Erfahrung bin ich nie auf ein Problem gestoßen, bei dem die einzige Lösung (oder tatsächlich die beste Lösung aus einer Auswahl) darin bestand, eine variable Variable zu verwenden. Das nächste, was ich habe, ist der Zugriff auf Konstanten in einer Instanz einer Klasse wie $classInstance::CLASS_CONSTANT
(die seit PHP 5.3 verfügbar ist), und selbst dann habe ich normalerweise nicht viel Verwendung dafür.
Ich vermute, es ist eine der vielen Warzen in PHP, die zu dieser Zeit eine gute Idee zu sein schienen.
Als Antwort auf Ihre Frage habe ich sie nicht gesehen, wenn es Anwendungsfälle gibt, in denen es die beste oder einzige Lösung für ein bestimmtes Problem ist.
Gibt es gute Anwendungsfälle für variable Variablen?
Es hängt von Ihrer Definition von "gut" ab.
Meine persönliche Antwort lautet einfach nein .
Ich habe versucht, eine zu finden, um diese Frage zu beantworten. Ich habe Hilfefragen zu SO gestellt, wo die Leute sie verwenden, und Leitfäden und Blog-Beiträge gelesen.
Ich kann einfach kein Szenario finden, in dem die Verwendung einer variablen Variablen nützlicher oder sinnvoller ist als ein anderer Ansatz .
Alles, was ich mir vorstellen konnte und wo Gründe gegen ihre Verwendung waren.
Ich habe sogar einen Artikel mit dankbaren und positiven Kommentaren gelesen, in dem dargelegt wurde, wie Switch-Anweisungen einfacher werden können.
Anweisungen wechseln, "einfacher"?
Ich würde behaupten, dass selbst für jemanden, der noch nicht mit PHP vertraut ist, ein Array zunächst etwas schwieriger zu handhaben sein könnte, aber die Lernkurve würde weit über die des Lernens variabler Variablen hinausgehen, sobald sie versuchen, sie innerhalb zu verwenden Code.
Es würde bald verwirrend werden, den Fluss variabler Variablen zu verfolgen und zu steuern.
Einmal erlernt, ist ein Array recht einfach anzusehen und zu verwenden.
Wie ich sie sehe, sind sie:
$var = "james";
var name und value sind genau dort.Sogar das PHP-Handbuch enthält Informationen, die, obwohl unbeabsichtigt, zeigen, dass variable Variablen kompliziert und möglicherweise "problematisch" sind:
PHP.net schrieb:
Um variable Variablen mit Arrays zu verwenden, müssen Sie ein Mehrdeutigkeitsproblem lösen. Das heißt, wenn Sie $$ a [1] schreiben, muss der Parser wissen, ob Sie $ a [1] als Variable verwenden wollten oder ob Sie $$ a als Variable und dann den [1] -Index von wollten diese Variable. Die Syntax zum Auflösen dieser Mehrdeutigkeit lautet: $ {$ a [1]} für den ersten Fall und $ {$ a} [1] für den zweiten.
Da ihre Verwendung sehr ungewöhnlich ist, würde ich argumentieren, dass selbst erfahrene Entwickler plötzlich eine Lernkurve haben würden, wenn ein anderer Entwickler dies in ihrem Code verwenden würde.
Variablenvariablen können nicht mit den Superglobal-Arrays von PHP innerhalb von Funktionen oder Klassenmethoden verwendet werden.
Dies ist mehr Lernen und sorgfältige Überlegung, um Probleme zu umgehen, die durch die Verwendung variabler Variablen entstehen.
Ohne Nutzen.
Ich denke, sie waren in früheren Zeiten vielleicht sehr nützlich, als "Dinosaurier" die Rechenzentren durchstreiften. und PHP war nicht stark und viel schneller mit Dingen wie Arrays usw. überarbeitet worden.
Wenn uns variable Variablen eine tiefgreifende Funktionalität oder sogar nur eine sehr nützliche Funktion geben würden, wäre es vielleicht das Lernen wert, sie zu verwenden.
Angesichts dessen, was sie bieten, sehe ich jedoch keinen Sinn darin, sie jemals zu verwenden, selbst wenn ein Array zu viel ist und einige Mikrosekunden mehr verwendet wird, um die Code-Wartbarkeit, Lesbarkeit, die Wahrung der Integrität und keinen Unterschied in der Funktionalität zu gewährleisten Verwenden Sie jedes Mal eine alternative Methode.