2010-11-14 21 views
9

Duplicar posible:
What does $$ (dollar dollar or double dollar) mean in PHP?doble signo de dólar php

me encontré el uso de este tipo de código en una de mis controladores:

foreach(get_object_vars($this->view) as $property=>$value){ 
    $$property = $value; 
} 

¿Hay algún problema con el uso la propiedad $$ para "localizar" propiedades de vista en $ variables simples?

edición:

debo añadir que este código se ejecuta en el ámbito de un método específico de la vista, así que no hay problema de las variables locales predominantes. Esto es para desviar a algunos de ustedes de señalar el problema de anular las variables locales.

+2

posible duplicado de [¿Qué significa $$ en PHP?] (Http://stackoverflow.com/questions/2715654/what-does-mean-in-php) – Charles

Respuesta

17

El problema con $$ en PHP es que crea nombres de variables desconocidos, que pueden anular los nombres de variables que ya usa. Es una fuente de errores de programación sutiles y, en general, no debe utilizarse.

+0

Gracias, tiene sentido. Sin embargo, si lo uso dentro del contexto del objeto de vista, donde las únicas propiedades son los valores a los que accede el script de vista, aún así puedo usarlo libremente. – Slavic

+4

No estoy de acuerdo con esta respuesta. Si está utilizando esto en un objeto View, entonces tiene un alcance limitado. El $$ es solo un problema si siempre trabajas en el alcance global, lo cual no estás haciendo si estás utilizando una estructura MVC. Si su objeto View realmente necesita algunas variables 'reservadas' que no desea anular, nómbrelo como '$ _var' para que no lo anule accidentalmente. –

+1

Es por eso que escribí "en general". Slavic parece saber lo que está haciendo. – Erik

1

No, esa es la manera de hacerlo y la única manera si no me equivoco. Aunque mi pregunta sería preguntar por qué querría hacer eso en lugar de usar la variable de objeto.

+0

Eso es porque proporciono los valores a una secuencia de comandos de vista , que accede a valores mucho más elegantes en $ value moda, en lugar de $ this-> value moda. – Slavic

5

Bueno, podría usar la función extract(). También ese fragmento: get_object_vars($this->view) indica que debería tener alguna matriz para almacenar esas variables, no un objeto.

+0

El extracto solo funciona para matrices. Las razones por las que estoy usando un objeto se deben a la estructura de código subyacente. No veo ningún problema al usar get_object_vars(); – Slavic

+0

Y probablemente quiera extraer omitiendo, por lo que no se sobrescriben las variables. – NikiC

-1

¡La respuesta aceptada es tan incorrecta! ¡El doble dólar no es causa de problemas y no debe considerarse como tal! ¡La sintaxis de doble dólar es de hecho una excelente característica de PHP que puede ser útil en muchas situaciones!

Y si teme que pueda anular otras variables al usarlo, significa que ha escrito un código pobre. Y de todos modos, esta sintaxis es utilizada por programadores más experimentados, por lo que los principiantes deben evitarla, hasta sentirse más seguros de lo que están haciendo.

Algunas situaciones en que esto sea realmente útil es un bucle a través de variables en función del valor de otras variables, variables dinámicas, variables agnósticos, etc.

Una vez más, permítanme concluir diciendo que el doble dólar es una característica de gran alcance y debe ser tratado como tal! ¡Con un gran poder viene una gran responsabilidad!

+2

Poderoso, no poderoso, pero de la pregunta vinculada parece que es un atajo a (forma simple) 'eval'. ¿Hace algo más que eso? – greenoldman

Cuestiones relacionadas