あなたがオブジェクト(CFCのインスタンス)をインスタンス化するとき、それがスコープ解除されるまで、それは、それは(.cfcというファイル)から来たクラスのそのバージョンと、そのオブジェクトとしてとどまりますガベージコレクションの対象となります。
あなたはこのように見えるかもしれなかったものの非常に短いバージョン:
// Write a component
fileWrite("a.cfc", "component { function foo(){return 'bar';} }");
// instantiate that component
a = new a();
writeOutput(a.foo()); // writes "bar" to the page
// now let's rewrite the file
fileWrite("a.cfc", "component { function bar(){return 'foo';} }");
writeOutput(a.foo()); // still writes "bar" to the page
writeOutput(a.bar()); // error - no such method
がa.cfc
の定義を変更すると、変数a
が変更を意味するものではありません - それはまだ古いバージョンです。
ここで、Surveyオブジェクトをセッションスコープに配置します。そのスコープは、セッションが終了するまで持続されます。アクティブでないためにタイムアウトするか、サーバーを再起動する必要があります。 structDelete()
を使用してセッションから削除することも、それを上書きすることもできます(session.survey = new Survey()
)。しかし、これらのいずれかが発生するまで、セッションには古いサーベイオブジェクトが引き継がれます。
このようなシナリオでは、私はセッションをリセットする傾向がありますので、?sessionreset=true
を追加し、Application.cfcのOnRequestStart()
にコードを入れてセッションをクリアしてください。また、アプリケーションスコープの変数に対してもこれを行うことになります。
関数のシグネチャが変更されましたか?セッションスコープまたはアプリケーションスコープにロードしていますか?後者の場合、アプリケーションをリロードしましたか? –
私はそれをセッションスコープにロードしています。テストの直前にロードすると動作しますが、テストからロードを削除すると、2つの異なるセッションスコープの場所があるように動作しません。それが意味をなさないならば。 – Lance
Application.cfcにコードを追加して、セッションが完全にタイムアウトするようにします。それはあなたの古いセッションをまだ実行しているように聞こえる。 – Shawn