Какие допустимые символы для имен пользовательских функций ColdFusion? - PullRequest
3 голосов
/ 05 декабря 2011

Немного предыстории: я работаю над проектом по преобразованию веб-приложения на другом языке сценариев в ColdFusion.Одна из проблем, с которыми я сталкиваюсь, заключается в том, что старая технология имеет некоторые имена функций, которые совпадают с функциями в CF, но работают немного по-другому.К сожалению, в большинстве случаев мне нужны старые функциональные возможности, поэтому я планирую написать свои собственные функции.

Чтобы избежать наименьших трудностей при преобразовании кода, я планировал ставить перед каждой функцией префикс с символом, который обычно не являетсяиспользуется в именах функций, например, $val().

Я знаю, что $ и _ допустимы в именах функций.Есть ли другие персонажи, которые я могу использовать?Я спрашиваю, потому что я знаю, что некоторые фреймворки используют это соглашение, и я не хочу сталкиваться с какими-либо из них в будущем развитии.Разумно ли использовать несколько символов таким образом, например, $_val()?

1 Ответ

7 голосов
/ 05 декабря 2011

Мне кажется разумным использовать $ _ в качестве префикса. Конечно, вы также можете рассмотреть возможность предоставления своим функциям собственного «пространства имен», либо путем включения в пользовательскую структуру области видимости, например, «UDF», с получением функции с именем, например «UDF.val ()»; Кроме того, вы можете собрать их вместе в CFC и получить к ним доступ как к компонентным методам. В любом случае вы были бы в безопасности от конфликтов имен.

редактировать

Чтобы проверить только что сделанный вами комментарий относительно пользовательских функций с тем же именем, что и у встроенной функции, я провел небольшой тест, чтобы проверить, так ли это. Похоже, что вы на самом деле можете создавать функции с тем же именем, что и встроенные, если они находятся в пределах настраиваемой области:

<cffunction name="foo">
    <cfreturn "bar">
</cffunction>


<cfset udf = {}>

<cfset udf.IsDefined = foo>

<cfoutput>#udf.IsDefined()#</cfoutput>

Этот код выводит "bar".

Или, если вам нравится подход CFC:

foo.cfc

component {
  function IsDefined()
  {
   return "blah";
  }

}

И вызывающий код:

<cfset udf2 = createObject("component", "foo")>
<cfoutput>#udf2.isDefined()#</cfoutput>
...