Hoy me encontré con esta pequeña joya PHP llamada variables variables .
$literal = "Hello";
$vv = "literal";
echo $$vv; // => prints "Hello"
¿Existe realmente algún caso de uso real para esta función de lenguaje?
Hoy me encontré con esta pequeña joya PHP llamada variables variables .
$literal = "Hello";
$vv = "literal";
echo $$vv; // => prints "Hello"
¿Existe realmente algún caso de uso real para esta función de lenguaje?
Respuestas:
Suponiendo una url de
http://example.com/hello/world
, y lo siguiente.htaccess
:router.php
, un enrutador demasiado simplista, sería:Es un uso práctico bastante estándar de variables variables. Buen truco, pero debes ser extremadamente cuidadoso al usarlo, abusar de él sin duda conducirá a un código horriblemente imposible de mantener.
Descargo de responsabilidad: el código presentado en la respuesta solo pretende ilustrar el uso de la función. No cubre el diseño adecuado, la seguridad, la mantenibilidad o la cordura. No utilice.
fuente
.htaccess
, pero tampoco los entiendo bien.$controller
es una variable (la estructura), pero lo que contiene se establece dinámicamente, por lo tanto, una variable variable. Un poco de nombre tonto, ¿no?¿Honestamente? En casi 10 años de experiencia en PHP, nunca me he encontrado con un problema para el cual la única solución (o la mejor opción) era usar una variable variable. Lo más cercano que tengo es poder acceder a las constantes en una instancia de una clase como
$classInstance::CLASS_CONSTANT
(que ha estado disponible desde PHP 5.3) e incluso entonces normalmente no tengo mucho uso para ello.Sospecho que es una de las muchas verrugas que existen en PHP que parecía una buena idea en ese momento.
Entonces, en respuesta a su pregunta, si hay casos de uso donde es el mejor o el único enfoque para un problema en particular, no los he visto.
fuente
Depende de su definición de "bueno".
Mi respuesta personal es simplemente no .
Traté de encontrar uno solo para responder a esta pregunta, hice preguntas de ayuda sobre SO donde la gente los usa, y leí unas guías y publicaciones en el blog.
Simplemente no puedo encontrar un escenario en el que pueda argumentarse que usar una variable variable es más útil o valioso que otro enfoque .
Todo lo que se me ocurrió y encontré razones en contra de su uso.
Incluso leí un artículo, con comentarios agradecidos y positivos, que argumentaba cómo puede facilitar las declaraciones de cambio.
Cambiar declaraciones, "más simple"?
Yo diría que incluso para alguien muy nuevo en PHP, una matriz podría ser un poco más difícil de entender al principio, pero la curva de aprendizaje pasaría mucho más allá de las variables de aprendizaje una vez que comiencen a usarlas código.
Pronto sería confuso tratar de seguir y controlar el flujo de variables variables.
Mientras que una vez aprendido, una matriz es bastante simple de ver y usar.
Tal como los veo, ellos:
$var = "james";
El nombre y el valor de var están ahí.Incluso el manual de PHP tiene información que, aunque no es intencional, muestra que las variables variables son complicadas y potencialmente "problemáticas":
PHP.net escribió:
Como su uso es muy poco común, diría que incluso los desarrolladores experimentados de repente tendrían alguna curva de aprendizaje si otro desarrollador usara esto en su código.
Las variables variables no se pueden usar con las matrices Superglobal de PHP dentro de funciones o métodos de clase.
Esto es más aprendizaje y una cuidadosa consideración para solucionar problemas que presentan variables variables.
Sin beneficio
Creo que pueden haber sido bastante útiles en tiempos antiguos, cuando los "dinosaurios" deambulaban por los centros de datos. y PHP no había sido refactorizado en gran medida y mucho más rápido con cosas como matrices, etc.
Si las variables variables nos dieron una funcionalidad profunda, o incluso muy útil, quizás valga la pena aprender a usarlas.
Sin embargo, dado lo que ofrecen, simplemente no veo el punto de usarlos, incluso si una matriz es exagerada y usó algunos microsegundos más, en aras del mantenimiento del código, la legibilidad, la preservación de la cordura y no hay diferencia en la funcionalidad, solo use un método alternativo cada vez.
fuente