Yes, these examples exploit the (well-publicized) bug that variables scope 
is broken in components and instead refers to the caller's variables scope.

When we fix that bug, variables will 'do the right thing' and become the 
private scope everyone wants to see - mirroring the unnamed scope / 
variables scope similarity that exists today *outside* components.

On Monday, September 2, 2002, at 04:04 , Pete Freitag wrote:

> I don't think you saw what I was getting at, here is a very explicit
> example:
>
> <cfset foo = CreateObject("component", "Salary")>
> <cfset variables.salary = "123">
> <cfoutput>#foo.getSalary()#</cfoutput>
>
> getSalary will return 123
>
> here is an even worse example:
>
> foo.cfc:
> <cfcomponent>
>       <cfset variables.x = "100">
>       <cffunction name="getX">
>               <cfreturn variables.x>
>       </cffunction>
>       <cffunction name="setX">
>               <cfargument name="x">
>               <cfset variables.x = arguments.x>
>       </cffunction>
> </cfcomponent>
>
> test.cfm:
> <cfset foo1 = CreateObject("component", "foo")>
> <cfset foo2 = CreateObject("component", "foo")>
> <cfset foo1.setX(1)>
> <cfset foo2.setX(2)>
> <cfoutput>#foo1.getX()#</cfoutput>
>
> take a wild guess what this outputs... 2!
>
> not my idea of private.
>
> -pete
>
>
> -----Original Message-----
> From: Matt Liotta [mailto:[EMAIL PROTECTED]]
> Sent: Monday, September 02, 2002 6:38 PM
> To: CF-Talk
> Subject: RE: CFC theory
>
>
> The variable is private. However, when you use the getSalary method you
> return a reference to the private variable. This is the same in Java if
> you declare a variable as private and have a public "getter" that
> returns a reference to it.
>
> Matt Liotta
> President & CEO
> Montara Software, Inc.
> http://www.montarasoftware.com/
> V: 415-577-8070
> F: 415-341-8906
> P: [EMAIL PROTECTED]
>
>> -----Original Message-----
>> From: Pete Freitag [mailto:[EMAIL PROTECTED]]
>> Sent: Monday, September 02, 2002 3:40 PM
>> To: CF-Talk
>> Subject: RE: CFC theory
>>
>>> Anything placed in the variables scope is private; bug or not.
>>
>> Depends on how you look at it, sure it's private in that you can't
> access
>> cfcInstance.salary
>>
>> But you could do something like this...
>>
>> <cfset variables.salary = foo.getSalary()>
>> <cfset variables.salary = DollarFormat(variables.salary)>
>> <cfoutput>#variables.salary#</cfoutput>
>>
>> and you will change the value of the data member inside the CFC. I
> don't
>> see
>> how you can call that behavior private, because it goes against all
> the
>> reasons you would want to have private access.
>>
>> Though I agree with you if you are saying that as long as the
> developer
>> using your CFC is aware of the bug, then you can pretend that
> variables
>> scope is private, and just avoid writing code like the code above.
>>
>>
>>
>
> 
______________________________________________________________________
Get the mailserver that powers this list at http://www.coolfusion.com
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Archives: http://www.mail-archive.com/[email protected]/
Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists

Reply via email to