Creating A VARIABLES-Scoped Function Of The Same Name
Posted March 12, 2007 at 4:08 PM by Ben Nadel
I have 5 minute before my lunch break is over and I just wanted to try this (not very exciting at all). What happens when you have a VARIABLES-scoped user defined ColdFusion function that has the same name as a built in ColdFusion function. The test:
- <!---
- Create a very simple UDF that simply echoes
- back the first argument that it is passed.
- --->
- <cffunction name="Echo">
- <cfreturn ARGUMENTS[ 1 ] />
- </cffunction>
-
-
- <!--- Assign this UDF to the "Find" key within variables. --->
- <cfset VARIABLES.Find = VARIABLES.Echo />
-
- <!--- Now, try to call this both with and without a scope. --->
- #VARIABLES.Find(
- "Naughty",
- "Naughty girl!"
- )#
-
- #Find(
- "Naughty",
- "Naughty girl!"
- )#
Running the above code, we get the output:
Naughty
1
Calling the UDF with the original VARIABLES scope calls our UDF. Calling it without the scope invokes the built-in ColdFusion method. Interesting.
Ok, what about if we do the same thing as above, but this time, we do NOT use the VARIABLES scope at all:
- <!---
- Set the Echo method directly into the non-scoped
- Find variable.
- --->
- <cfset Find = VARIABLES.Echo />
-
- <!--- Now, try to call this both with and without a scope. --->
- #VARIABLES.Find(
- "Naughty",
- "Naughty girl!"
- )#
-
- #Find(
- "Naughty",
- "Naughty girl!"
- )#
Running the above, we get the output:
Naughty
1
Exactly the same effect whether or not we use the VARIABLES scope. Kind of interesting. Nothing really important here. The only strange thing is that if you do this:
- <cfdump var="#GetMetaData( Find )#" />
It gives you the UDF meta data and NOT the built in ColdFusion method meta data.
Ok, back to work :)
Reader Comments
Presumably if you do getmetadata( variables.find ) you get the data you expect?
Ben,
Super cool tip. It also looks like a good way to play a practicable joke on a CF developer.
David.



