cadena de interpolación:
<cfset name = "Danny" />
<cfset greeting = "Hello, #name#!" />
<!--- greeting is set to: "Hello, Danny!" --->
escapado-Auto interpolación de cadenas en cfquery
:
<cfset username = "dannyo'doule" ?>
<cfquery ...>
select u.[ID]
from [User] u
where u.[Username] = '#username#'
</cfquery>
<!--- the query is sent to the server (auto-escaped) as: --->
<!--- select u.[ID] from [User] u where u.[Username] = 'dannyo''doule' --->
<!--- note that the single-quote in the username has been escaped --->
<!--- by cfquery before being sent to the database server --->
Paso de argumentos complejos/atributos en CFML:
<cfset p = StructNew() />
<cfset p.firstName = "Danny" />
<cfset p.lastName = "Robinson" />
<cfmodule template="modules/view/person.cfm" person="#p#">
<!--- the variable Attributes.person will be --->
<!--- available in modules/view/person.cfm --->
Pasando un borrador los argumentos lex requieren #
signes solo en CFML, no en CFScript. Además, puede pasar cualquier tipo de valor: valores simples, matrices, estructuras, cfcomponents, cffunctions, objetos de Java, objetos COM, etc.
En todos estos casos, el texto entre los signos #
qué no tienen a ser el nombre de una variable . De hecho, puede hacerlo con cualquier expresión. Por supuesto, para la interpolación de cadenas, la expresión debe evaluarse como un valor simple, pero para el argumento/atributo que pasa en CFML, la expresión puede evaluar a cualquier valor complejo también.
Toma un poco de tiempo aprender las reglas. Pero en realidad no necesita usarlo demasiado, y le recomendaría tratar de averiguar cuándo realmente necesita usarlo, y no lo use cuando no lo necesite. Ver mi respuesta a continuación. – yfeldblum