Creating A VARIABLES-Scoped Function Of The Same Name
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 robot!" )# #Find( "Naughty", "Naughty robot!" )#
Running the above code, we get the output:
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 robot!" )# #Find( "Naughty", "Naughty robot!" )#
Running the above, we get the output:
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 :)
Want to use code from this post? Check out the license.
Presumably if you do getmetadata( variables.find ) you get the data you expect?
Super cool tip. It also looks like a good way to play a practicable joke on a CF developer.