Comment Coldfusion gère-t-il createObject en interne ?
-
23-12-2019 - |
Question
Supposons que je souhaite appeler une fonction statique à partir d'un CFC à partir d'un bloc cfscript.Autant que je sache, la seule méthode utilise createObject() qui renvoie une référence à l'objet CFC.
Est-ce une bonne pratique ?Je pense que je me souviens avoir lu que cfinvoke instanciait définitivement les objets intelligemment et n'instancierait pas plusieurs fois un CFC statique.Est-ce vrai, et si oui, est-ce toujours vrai lors de l'utilisation de createObject() ?
La solution
CFOBJET
CFOBJECT instancie un composant et crée une variable pour celui-ci.
<cfobject type="component" name="path.to.my.CFC" name="myCFC" />
CFINVOKE
CFINVOKE peut alors référencer la variable créée par CFOBJECT, afin de ne pas avoir à recréer l'objet.
<cfinvoke component="#myCFC#" method="foo" returnVariable="myValue" />
Vous pouvez donc appeler autant de CFINVOKE que vous le souhaitez sur #myCFC#
sans recréer l'objet.
Cependant, CFINVOKE peut également créer implicitement l'objet pour vous si vous n'utilisez pas également CFOBJECT.
<cfinvoke component="path.to.my.CFC" method="foo" returnVariable="myValue" />
Appeler plusieurs fonctions de cette manière recréera l'objet à chaque fois.
CRÉER UN OBJET
createObject()
fonctionne à peu près de la même manière.Soit créez d'abord l'objet avec une variable de référence
<cfscript>
myCFC = createObject("component", "path.to.my.CFC");
myValue = myCFC.foo();
otherValue = myCFC.bar();
</cfscript>
ou créez l'objet à chaque appel de fonction.
<cfscript>
myValue = createObject("component", "path.to.my.CFC").foo();
otherValue = createObject("component", "path.to.my.CFC").bar();
</cfscript>
je préfère createObject()
depuis que j'utilise CFSCRIPT autant que possible.Et je crée toujours l'objet en premier si je veux en appeler plusieurs fonctions.