2017-12-14 25 views
0

레거시 ColdFusion 응용 프로그램에서 작업 할 때 응용 프로그램 전체에서 <cfset> 태그가 사용되는 방식이 일치하지 않습니다. 같은 변수는ColdFusion 11 : <CFSET> 태그의 #을 평가하는 변수와의 차이점

을 수행 한 후

<cfset myvariable = 6> 
<cfset #myvariable# = 5> 

... # # 내가 응용 프로그램 범위

<cfset #application.test# = "test"> 
<cfset application.test = "test2"> 

그리고에 변수 범위에이 발생했을

없이 평가 연산자로 설정
<cfdump var=#variables#> 
<cfdump var=#application#> 



test  == "test2" 
myvariable == 5 

그래서 동일한 것으로 간주됩니다. 변수.

제가 생각할 필요가있는 장면 뒤에서 일어나는 모범 사례/가장자리 사례/일이 있는지 궁금 해서요 ... 아니면 평가 연산자가이 경우별로하지 않습니까?

(변수 물질의합니까 범위 지정?) 문자열의 유용한 그들에 둘러싸인 용어를 평가하기 위해 CFML 파서에게 #

+1

기존 코드에서''같은 것을주의하십시오. 이것은 역동적 인 변수를 생성하기위한 오래되고 낙담 한 방법입니다. 따옴표와 파운드 기호는'# someName # '의 * 값 *을 변수 이름으로 사용합니다. 추천 된 방법'' – Ageax

답변

2

파운드. <cfloop array="#myArray#"...과 같은 태그 속성에서 변수를 전달하거나 "Hello #name#!"과 같이 문자열 연결을 피하거나 <cfargument name="datetime" default="#now()#">과 같은 동적 표현식이 필요한 경우이 변수가 필요합니다. 예제의 파운드는 아무런 영향을 미치지 않고 성능에 영향을주지 않습니다. 그것은 필요하지 않을 때 파운드를 사용하는 것은 나쁜 습관으로 간주됩니다.

범위 지정이 중요합니다. 일부 범위는 (부분적으로) 지속됩니다 (application, request, session). 나머지는 휘발성입니다 (variables, local). 상황에 따라 다릅니다. cfcomponentvariables은 개인 인스턴스 필드 범위이며 .cfm 템플릿의 variables은 로컬 변수처럼 작동합니다. 함수에 지역 변수를 사용하려면 var 키워드 또는 local 범위가 사용됩니다. Have a look at the official documentation about all the scopes.

범위를 지정하고 일치하는 이름으로 첫 번째 것을 선택하여 범위를 생략 할 때마다 ColdFusion에서 변수를 찾으므로 범위를 지정해야합니다. 이것은 성능 오버 헤드 (거의 무시할 만 함)를 가지며 출혈 변수로 인해 이상한 문제가 발생할 수 있습니다. 일부 사람들 (포함)은 기본 범위이기 때문에 cfcomponent 외부의 variables을 지정하지 않습니다. 그것은 당신에게 달려 있습니다.