coldfusion - family - cfm cold fusion
En ColdFusion, las variables se resuelven en qué orden? (2)
Tengo poca impresión sobre el orden de resolución de las variables, pero no puedo encontrarlo en la Guía de referencia de CFML o ColdFusion. ¿Alguien puede ayudar?
Es una buena práctica generalmente aceptada que siempre abarque sus variables por dos razones principales:
- Rendimiento - CF no necesita encontrar la variable buscando a través de los ámbitos a su vez
- Exactitud: si dos variables tienen el mismo nombre en diferentes ámbitos, es posible que no obtenga la que estaba esperando
Dicho esto, aquí está el orden en el que se buscan los ámbitos de las variables:
- Función local (palabra clave VAR)
- Hilo local (CFTHREAD)
- Resultados de consulta
- Función ARGUMENTOS
- VARIABLES locales
- Variables CGI
- Variables de archivo
- Parámetros de URL
- Campos FORM
- Valores de COOKIE
- Variables CLIENT
EDITAR: También es significativo observar qué ámbitos no se buscan: SESIÓN, SERVIDOR, APLICACIÓN
Orden de alcance
El orden de alcance canónico para ColdFusion 9 es:
- Local (solo dentro de CFC y UDF)
- Argumentos (solo dentro de los CFC y UDF)
- Rosca local (solo dentro de los hilos)
- Consulta (solo dentro de un bucle de consulta)
- Subproceso (solo dentro de subprocesos y plantillas que invocan subprocesos)
- Variables
- CGI
- Cffile
- URL
- Formar
- Galleta
- Cliente
Puede ver la documentación de Adobe al respecto en Desarrollar aplicaciones de ColdFusion 9 .
Sin embargo, algunos ámbitos solo están disponibles en determinados contextos, por lo que el orden en que se buscan los ámbitos es diferente, según el contexto del código.
Dentro de CFML (sin hilos)
- Variables
- CGI
- Cffile
- URL
- Formar
- Galleta
- Cliente
Dentro de un CFC (sin hilos)
- Local
- Argumentos
- Consulta (solo dentro de un bucle de consulta)
- Variables
- CGI
- Cffile
- URL
- Formar
- Galleta
- Cliente
Mejores prácticas
Como señala Al Everett en su respuesta, se considera la mejor práctica tener siempre las variables de alcance. El alcance explícito produce un código menos ambiguo y suele ser más rápido. Cada vez que no delimita una variable, corre el riesgo de obtener una variable de un ámbito que no tenía la intención de.
Cuando la variable a la que está accediendo está en el primer ámbito en el orden de búsqueda, en realidad es un poco más rápido dejar la variable sin ámbito. Esto se debe a que cada punto en un nombre de variable incurre en un pequeño costo ya que ColdFusion lo resuelve. Por ejemplo, en un método CFC es un poco más rápido acceder a
myVar
que alocal.myVar
. Esto solo se aplica a:
- variables de ámbito
local
dentro de un CFC o UDF- Enhebrar variables de ámbito
local
dentro de un hilovariables
ámbito de variables dentro de CFMLEn todas las demás circunstancias, es más rápido (y más claro) declarar explícitamente el alcance.
El uso de esta técnica debe considerarse una mala práctica. Solo debe utilizar esta técnica en el código de rendimiento crítico, donde puede garantizar que la variable siempre exista en el ámbito previsto. Tenga en cuenta que tiene el costo de una mayor ambigüedad.