2017-12-14 13 views
0

従来のColdFusionアプリケーションでは、アプリケーション全体で<cfset>タグがどのように使用されているのか不一致が発生しました。同じ変数がColdFusion 11:<CFSET>タグの#評価#を使用した変数の設定の違い

を行った後、評価演算子 # #で設定されており、

せずに私は、アプリケーションのスコープ変数のスコープに

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

そして上でこれを発生している...

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

<cfdump var=#variables#> 
<cfdump var=#application#> 



test  == "test2" 
myvariable == 5 

だから、変数。

ベストプラクティス/エッジケース/シーンの背後で起こっていることが気になる必要があるかどうか、またはこの場合は評価オペレータがあまり効果がないのだろうか?

(変数問題のないスコープ?)

+1

従来のコードでは、 'のようなものも注意してください。それは、動的変数を作成するための昔の、そして落胆した方法です。引用符とポンド記号は '#someName# 'の* value *を変数名として使用します。推奨される方法 '' – Ageax

答えて

2

ポンド#文字列に有用、それらに囲まれた用語を評価するために、CFMLパーサーを伝えます。 <cfloop array="#myArray#"...などのタグ属性で変数を渡すか、"Hello #name#!"などの文字列連結を避けたい場合や、<cfargument name="datetime" default="#now()#">などの動的式が必要な場合は、これらの変数が必要です。あなたの例のポンドは何もせず、パフォーマンスに影響しません。しかし、必要でないときにはポンドを使用するのは悪い習慣と考えられています。

スコープは問題となります。一部のスコープは(部分的に)永続的です(applicationrequestsession)。その他は揮発性です(variables,)。それは文脈によって異なります。 cfcomponentvariablesはプライベートインスタンスフィールドスコープですが、.cfmテンプレートのvariablesはローカル変数のように機能します。関数にローカル変数を含めるには、varキーワードまたはlocalスコープが使用されます。 Have a look at the official documentation about all the scopes.

スコープを指定する必要があります。これは、スコープのセットを検索し、一致する名前で最初のスコープを選択することによって、スコープを省略するたびにColdFusionが変数を見つけるためです。これはパフォーマンス上のオーバーヘッド(ほとんど無視できる)を持ち、出血変数のために奇妙な問題につながる可能性があります。一部の人(私を含む)はをcfcomponentの外に指定しません。これはデフォルトのスコープなのでです。それはあなた次第です。

関連する問題