Die kurze Antwort auf Ihre Frage ist, dass nein, Sie werden wahrscheinlich nicht in Schwierigkeiten geraten, dies zu tun. Außerhalb des Kontextes einer UDF (selbst noch innerhalb eines CFC) impliziert eine nicht-beschränkte set-Anweisung den Gültigkeitsbereich der Variablen.
Darüber hinaus steht in einem CFC der Gültigkeitsbereich Variablen für alle Funktionen zur Verfügung. Es ist eine Art globaler Geltungsbereich in diesem CFC - ähnlich wie im "this" - Bereich, außer dass der Gültigkeitsbereich der Variablen "privaten" Variablen ähnelt, während der Gültigkeitsbereich den öffentlichen Variablen ähnelt.
Um dies zu testen, erstellen test.cfc:
<cfcomponent>
<cfset foo = "bar" />
<cffunction name="dumpit" output="true">
<cfdump var="#variables#" label="cfc variables scope">
<cfdump var="#this#" label="cfc this scope">
</cffunction>
</cfcomponent>
und eine Seite zu testen, test.cfm:
<cfset createObject("component", "test").dumpit() />
Und werden die Ergebnisse sein:
Nun, um ein anderes Problem zu adressieren, sehe ich in Ihrem Beispiel Code ...
In CF haben alle benutzerdefinierten Funktionen einen speziellen nicht benannten Bereich, der gemeinhin als "var" Bereich bezeichnet wird. Wenn Sie die folgenden Aktionen in einem UDF:
<cfset foo = "bar" />
Dann CF sagen Sie diese Variable in den var Rahmen zu setzen.
Um ein wenig Verbindung Dinge, Sie Probleme (Variablenwerte zu ändern, wenn Sie sie nicht erwartet hatten) laufen können, wenn Sie nicht mit dem var Umfang im Inline-UDFs sind.
So ist die Faustregel immer, immer, immer, IMMER var-scope Ihre Funktion internen Variablen (einschließlich Abfrage-Namen).Es gibt ein Tool mit der Bezeichnung varScoper, das Sie beim Auffinden von Variablen unterstützt, die var-scoped sein müssen. Zuletzt habe ich überprüft, dass es nicht perfekt war, aber es ist definitiv ein Anfang.
Es ist jedoch eine schlecht Idee (Anzeige/Nutzung) Variablen zu verweisen, ohne Rahmen (natürlich var-scoped Variablen ausgenommen, da Sie nicht den Bereich angeben können von lesen) in FCKW oder sogar auf Ihrem Standard-CFM-Seiten. Ab CF7 gab es 9 Bereiche, die in einer bestimmten Reihenfolge überprüft wurden, wenn Sie eine Variable ohne Angabe des Bereichs lesen, erste Übereinstimmung gewinnt. Mit CF8 könnte es mehr Bereiche in dieser Liste geben, die ich nicht überprüft habe. Wenn Sie das tun, riskieren Sie, einen Wert von einem Bereich zu erhalten, wenn Sie es von einem anderen erwarten; Das ist ein Albtraum zu debuggen ... Ich versichere Ihnen. ;)
Also kurz: implizieren der Umfang einer Variablen (am Set) ist keine schreckliche Idee (obwohl ich es normalerweise sowieso angeben); aber Schlussfolgerung Variable Umfang (auf lesen) fragt nach Ärger.
Ja, nehmen die Argumente Vorrang vor der Instanzvariable. Damit bin ich einverstanden. Es ist konsistent mit anderen Sprachen, wo ich dieses oder self verwenden müsste, um die Instanzvariable im Gegensatz zu dem Argument zu referenzieren. –