سؤال

وكانت هذه واحدة من أكبر العقبات في تعليم الناس الجديدة كولد فيوجن.

عند استخدام # غامضة في أحسن الأحوال.لأن استخدامها لا في كثير من الأحيان خلق مشكلة يبدو أن معظم الناس تنجذب إلى استخدامها أكثر من اللازم.

إذن ما هي القواعد الأساسية?

هل كانت مفيدة؟

المحلول

أعتقد أنه قد يكون من الأسهل أن أقول أين عدم استخدام #.المكان الوحيد في cfif البيانات ، cfset البيانات حيث كنت لا تستخدم متغير لبناء سلسلة في الاقتباس.كنت بحاجة إلى استخدام علامة # تقريبا في جميع الحالات الأخرى.

على سبيل المثال من حيث كنت لا تنوي استخدامه:

<cfset value1 = 5>
<cfset value2 = value1/>

<cfif value1 EQ value2>
    Yay!!!
</cfif>

<cfset value2 = "Four plus one is " & value1/>

أمثلة حيث سيتم استخدام #:

in a cfset where the variable is surrounded by quotes
<cfset value1 = 5>
<cfset value2 = "Four plus one is #value1#"/>

the bodies of cfoutput, cfmail, and cffunction (output="yes") tags
<cfoutput>#value2#</cfoutput>
<cfmail to="e@example.com" from="e@example.com" subject="x">#value2#</cfmail>
<cffunction name="func" output="yes">#value2#</cffunction>    

in an attribute value of any coldfusion tag
<cfset dsn = "myDB"/>
<cfquery name="qryUsers" datasource="#dsn#">

<cfset value1 = 5>
<cfset value2 = 10/>
<cfloop from="#value1#" to="#value2#" index="i">

<cfqueryparam value="#value1#" cfsqltype="cf_sql_integer"/>

تحرير:

واحد غريب الاطوار قليلا شيء لقد لاحظت فقط أن يبدو متعارضا مشروط الحلقات تسمح اسم المتغير ليتم استخدامها مع أو بدون # علامات.

<cfset value1 = 5>

<cfloop condition = "value1 LTE 10">
    <cfoutput>#value1#</cfoutput><br>
    <cfset value1 += 1>
</cfloop>

<cfset value1 = 5>

<cfloop condition = "#value1# LTE 10">
    <cfoutput>#value1#</cfoutput><br>
    <cfset value1 += 1>
</cfloop>

نصائح أخرى

وإليك ما لديها أدوبي يقول عن ذلك:

عن طريق علامات الأرقام

وسلسلة الاستيفاء:

<cfset name = "Danny" />
<cfset greeting = "Hello, #name#!" />
<!--- greeting is set to: "Hello, Danny!" --->

ونجا السيارات الاستيفاء سلسلة في cfquery:

<cfset username = "dannyo'doule" ?>
<cfquery ...>
    select u.[ID]
    from [User] u
    where u.[Username] = '#username#'
</cfquery>
<!--- the query is sent to the server (auto-escaped) as: --->
<!--- select u.[ID] from [User] u where u.[Username] = 'dannyo''doule' --->
<!--- note that the single-quote in the username has been escaped --->
<!--- by cfquery before being sent to the database server --->

واجتياز الحجج المعقدة / سمات في CFML:

<cfset p = StructNew() />
<cfset p.firstName = "Danny" />
<cfset p.lastName = "Robinson" />
<cfmodule template="modules/view/person.cfm" person="#p#">
<!--- the variable Attributes.person will be --->
<!--- available in modules/view/person.cfm --->

واجتياز الحجج معقدة تتطلب و signes # فقط في CFML، وليس CFScript. وبالإضافة إلى ذلك، يمكنك تمرير أي نوع من قيمة: القيم بسيطة، المصفوفات، البنيات، cfcomponents، cffunctions، وكائنات جافا، وكائنات كوم، الخ

في كل هذه الحالات، النص بين علامات # لا <م> لا يجب أن يكون عليه <م> اسم متغير . في الواقع، يمكن من قبل أي تعبير. وبطبيعة الحال، على سبيل الاستيفاء سلسلة، يجب التعبير تقييم إلى قيمة بسيطة، ولكن لحجة / السمة التي تمر في CFML، والتعبير قد تقييم إلى أي قيمة معقدة أيضا.

وبناء الجملة #...# يسمح لك بإضافة تعبير ضمن سلسلة حرفية. كولد فيوجن للأسف يتعارض جدا حول ما هو سلسلة وما هو تعبير. تقدم جيسون قائمة جيدة من الأمثلة من عند استخدام ( أو عدم استخدام) ثانيتين (#).

في خطر السبر مثل الحكيم الرجل كقاعدة عامة هي: استخدام # حول المتغيرات أو التعبير فقط عندما لا وبذلك لا تسفر عن النتيجة الصحيحة.أو:إذا كنت لا حاجة إليها ، لا تستخدم لهم.

أنا مثل جيسون الجواب على الرغم من.

ودعونا نبدأ على افتراض انك لا نتحدث عن علامات cfoutput، تسبب ثم كان الجواب دائما، في أي مكان آخر في التعليمات البرمجية الخاصة بك، إذا كنت داخل علامات تنصيص، ثم تحتاج إلى استخدام # حرف إذا كان من الممكن فعلا أن اكتب القيمة ما يجري لاستخدامها ... حتى إذا كنت في علامة cfloop وضع 'إلى' سمة، هل يمكن بسهولة اكتب 6، ولكن إذا كنت ترغب في استخدام متغير تحتاج إلى استخدام # حرف. الآن إذا كنت في علامة cfloop تعيين المعلمة الاستعلام، لا توجد وسيلة هل يمكن فعلا كتابة الاستعلام إلى تلك السمة، لا توجد وسيلة لكتابة استعلام، لذلك هناك حاجة إلى أي # حرف.

وبالمثل في علامة cfdump، يمكنك تفريغ نص ثابت، لذلك إذا كنت ترغب في تفريغ محتويات متغير، فإنك سوف تحتاج إلى استخدام الرمز #. هذه المشكلة هي عموما تصحح نفسها بنفسها، لكني أشعر بك الألم، وربما أحبطت طلابك أنه لا يوجد "دائما استخدامها" أو "NEVER استخدامها" نهج ... للأسف هذا ليس هو الحال، والشيء الوحيد الذي صحيح، هي طريقة واحدة فقط داخل علامتي الاقتباس ستكون صحيحة. حتى إذا كان لا يعمل نظرة على ذلك شاقا وطويلا واعتقد لنفسك: "هل أستطيع كتابة تلك القيمة من بدلا من استخدام القيمة الموجودة في هذا المتغير؟" إذا كان الجواب بالنفي، ثم لن تكون هناك حاجة ل# حرف، وإلا احصل على # حرف فو جرا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top