Lucee のコンポーネントで合成アクセサーを使用しようとしています (ただし、この問題は ColdFusion でも同じようです)。
再現コード:
// Person.cfc
component accessors=true {
property firstName;
property lastName;
function init(firstName, lastName){
variables.firstName = arguments.firstName;
variables.lastName = arguments.lastName;
}
}
そして呼び出しコード:
// person.cfm
person = new Person("Abigail", "Bowen");
writeDump(person);
ここでは、合成されたアクセサーを使用していないことに注意してください。引数の値を、同じ名前の変数スコープの変数に純粋に設定しています。
ただし、このコードを実行すると、次のように表示されます。
プロパティがどのように設定されたかに注意してください。これには問題はありませんが、accessors
フラグがどのように機能するかを明確に理解していません。私はそれが私のためにいくつかのアクセサメソッドを合成することを意図しているだけだと思っていました(それは持っています)が、それだけです。
また、アクセサーを true に設定しないように CFC 定義を変更すると、ダンプに次のように表示されることにも注意してください。
そのため、合成されたアクセサーは (予想どおり) ありませんが、プロパティも表示されません (変数スコープの値の有無にかかわらず)。
この「プロパティ」とアクセサー設定の混同がよくわかりませんか? 確かに、アクセサー設定は、それらのアクセサー メソッドが作成されるかどうかにのみ影響するはずですか?
これを 1 つのプラットフォームでしか見ていなかったとしたらwriteDump()
、 がプロパティ定義をどのように解釈するかという気まぐれに原因があると思います。しかし、動作は ColdFusion 11 でも同じであるため、実際には動作に何らかの違いがあるように見えますが、私にはよくわかりません。
誰でもこれを説明できますか?それを説明するドキュメントはありますか?そうじゃないなら... うーん... どうして?
ここでの私の根底にある懸念は、プロパティ値が「適切に」保存されておらず、コードをさらに実装すると問題が発生する可能性があることです。
更新: 少なくとも ColdFusion ではwriteDump()
、プロパティのゲッターがある場合 (フラグが設定されているかどうかに関係なくaccessors
)、プロパティ値がダンプに表示されるため、 の動作が変更されたようです。ただし、これは Lucee には当てはまらないため、まだ疑問符が残っています。
完全な開示のために、この質問は、私がブログでも行った質問の要約です (「CFML: アクセサーを理解しようとしている」)。私のブログはこのサイトの読者とは異なる読者を獲得しているため、重複は意図的なものです。