Wie eine Funktion aufzurufen, dynamisch, dass ein Teil eines instanziierten cfc ist, ohne Zensur () zu verwenden?

StackOverflow https://stackoverflow.com/questions/84463

  •  01-07-2019
  •  | 
  •  

Frage

Zum Beispiel ich möchte in der Lage sein, programmatisch eine einzige Zeile Code zu treffen, wie die folgenden, wo der Name der Funktion auswerten, ohne () dynamisch zugewiesen wird. Der folgende Code natürlich nicht funktioniert, sondern stellt dar, was würde ich tun.

application.obj[funcName](argumentCollection=params)

Die einzige Möglichkeit, die ich finden kann eine Funktion dynamisch unter Verwendung cfinvoke ist zu nennen, aber so weit ich, dass instanziiert den im Zusammenhang cfc / Funktion on the fly sagen kann, und ein zuvor instanziiert cfc nicht verwenden kann.

Danke

War es hilfreich?

Lösung

Nach der Dokumentation, können Sie etwas tun:

<!--- Create the component instance. --->
<cfobject component="tellTime2" name="tellTimeObj">
<!--- Invoke the methods. --->
<cfinvoke component="#tellTimeObj#" method="getLocalTime" returnvariable="localTime">
<cfinvoke component="#tellTimeObj#" method="getUTCTime" returnvariable="UTCTime">

Es soll möglich sein, einfach zu nennen mit method = „# myMethod #“, um dynamisch eine bestimmte Funktion aufrufen.

Andere Tipps

Sie können cfinvoke verwenden. Sie müssen keine Komponente angeben.

<cfinvoke method="application.#funcName#" argumentCollection="#params#">

Sie können auch etwas sehr ähnlich, die Art und Weise tun Sie wollte es benutzen. Sie können die Methode in dem Objekt Zugriff auf die Syntax Sie verwendet, kann man einfach nennen es nicht zur gleichen Zeit. Allerdings, wenn Sie es zu einer temporären Variablen zuweisen, können Sie es nennen

<!--- get the component (has methods 'sayHi' and a method 'sayHello') --->
<cfset myObj = createObject("component", "test_object")>

<!--- set the function that we want dynamically then call it (it's a two step process) --->
<cfset func = "sayHi">
<cfset funcInstance = myObj[func]>
<cfoutput>#funcInstance("Dave")#</cfoutput>

<cfset func = "sayHello">
<cfset funcInstance = myObj[func]>
<cfoutput>#funcInstance("Dave")#</cfoutput>

In CFML-Funktionen sind erstklassige Mitglieder der Sprache. Dies ermöglicht es uns, sie wie eine Variable übergeben um. Im folgende Beispiel werde ich die Funktion mit dem Namen ‚foobar‘ kopieren und „$ fn“ innerhalb des gleichen Objekts umbenennen. Dann können wir einfach $ fn () aufrufen.

funcName = 'foobar';    
application.obj.$fn = application.obj[funcName];
application.obj.$fn(argumentCollection=arguments);

Der Kontext der Funktion ist wichtig, vor allem, wenn es alle Werte in dem ‚Variablen‘ verweist oder ‚this‘ Anwendungsbereich des Objekts. Hinweis: Dies ist für CFC-Instanzen in gemeinsam genutzten Bereichen nicht Thread-sicher

Die schnellste Methode ist Ben Doom Empfehlung zu verwenden. Ich wollte nur gründlich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top