2012-04-07 3 views
1

Я не очень знаком с ColdFusion, но я читаю через какой-то код и увидел это:Coldfusion

<CFLOOP INDEX="element" LIST="#FIELDNAMES#"> 
    <CFSET REP_LIMIT = 0> 
    <CFSET E_VALUE = EVALUATE(#ELEMENT#)> 

У меня есть два вопроса: 1) Является ли, что установка E_VALUE быть ток индекс? Если да, то что с ОЦЕНКОЙ? и 2) Является ли это плохим и/или опасным использованием ОЦЕНКИ?

+0

Каков контекст кода? Это похоже на очень плохой код, но в определенном контексте это может иметь больше смысла. Например, существует ли «цикл запроса» вокруг этого кода? Во всех вероятных капюшонах код Evaluate (Element) должен быть заменен ссылочной ссылкой, такой как form [element], url [element], комбинация ссылок url ​​/ form или queryvarname [element] [queryvarname.currentrow]. –

ответ

2

Evaluate используется в основном для оценки динамически названных переменных, таких как переменные формы. Если вы не знаете, какие переменные формы могут быть отправлены из формы, вы можете просто пропустить имя поля, обратившись к FORM.fieldnames.

(http://cfprimer.blogspot.com/2005/03/avoid-evaluate.html). В 14 лет с кодированием CF я видел, что он использовался только несколько раз. На мой взгляд, это плохая практика, чтобы настроить себя таким образом, чтобы заранее не знать, какие элементы формы будут представлены.

В вашем примере индекс имеет значение «element». Таким образом, при циклизации все, что содержится в вашем списке «fieldnames», будет элементом.

Если вы хотите, чтобы вывести эти имена полей, вы могли бы сделать что-то вроде этого:

<cfset fieldnames = "firstname,lastname,email"> 
<cfoutput> 
<cfloop index="element" list="#fieldnames#"> 
    #element#<br> 
</cfloop> 
</cfoutput> 

Это будет выводить так:

firstname 
lastname 
email 
+0

Просто подумал, что небольшое дополнение будет полезно вашему прекрасному объяснению, поскольку '' будет идентичным '', или же просто используйте 'E_VALUE' , Просто не стоит добавлять отдельный ответ только для этого :) –

+0

Небольшая опечатка, я думаю, вы хотели набрать «это эквивалентно FORM [Element] :) ** Редактировать ** К сожалению, я просто заметил, что предыдущий комментарий был из Simon not you @Evik. – Leigh

+1

Еще одна заметка о # 2. Да, использование 'оценки' в этой ситуации обычно обескураживается, потому что это необязательно. Все переменные« post »доступны в системной структуре' FORM'. доступ к которым можно получить с помощью ассоциативной записи массива, например, Саймона, например, используя 'FORM [Element]', а не 'FORM (« element »)' – Leigh