0

我已经编写了一个包含一些安全补丁的库。在那个库中有许多 CF8 和 up 函数、属性等。

我真的真的不想削减功能,因为 adobe 无法将它组合在一起并将这个基本功能放入 CF7,所以我希望在每个函数中编写单独的行。问题是当 CF 最初读取代码时,如果它发现它无法识别的东西,无论它是否会被调用,它都会出错。

例如在cfdirectory CF7 不支持'type' 属性。当存在“类型”属性时,我有一个查找目录功能在 CF7 中失败,将其取出会使搜索时间增加 10 倍。

<cftry> 
<cfdirectory action="list" directory="#arguments.start#" name="LOCAL.dirquery" type="dir" /><!---//GET QUERY OF DIRECTORIES IN START DIRECTORY--->
<cfcatch>
    <cfsetting requesttimeout="600">
    <cfdirectory action="list" directory="#arguments.start#" name="LOCAL.dirquery" /><!---//GET QUERY OF DIRECTORIES IN START DIRECTORY--->
</cfcatch>

此代码不起作用,条件块也不起作用。我猜读者无法将 thsi 解析为任何语言,因此失败了。

4

1 回答 1

5

代码可能在编译时失败,而不是在运行时(需要查看您收到的错误才能确定)。如果它是编译器错误,您需要将 CF7 函数与 CF8+ 函数分开在不同的组件中。然后在运行时检查 CF 版本以确定调用哪个组件/函数。

这里有一些伪代码,您可以在应用程序启动时将正确的版本函数加载到内存中。这样,您就可以在代码中的任何位置调用函数的一致接口。

伪代码:

onApplicationStart(){

    if (server.coldfusion.productversion == 7){
        application.cffunctions = CF7FunctionsComponent;
    } else {
        application.cffunctions = CF8FunctionsComponent;
    }

}

在其他任何地方,无论当前运行的 CF 版本如何,您都调用相同的函数:

application.cffunctions.doSomething();
于 2013-04-19T18:34:04.463 回答