Implicit constructor for CFC

You can initialize the CFC properties, when you instantiate the CFC, by passing the values as key-value pair or struct. 
For example, assume that you have a CFC employee.cfc with the properties firstName and lastName.
You can use the following syntax to set the first name and last name:

emp=new employee(firstName="Tom", lastName="Nash");

or as an implicit struct as follows:

emp=new Employee({firstName="Tom", lastName="Nash"});

If an init() method is defined for the CFC, either by explicitly defining an {{init()}}method or by providing the {{}}method in the component's {{initmethod }}attribute, implicit Constructor is not invoked.
For implicit Constructor support, either specify accessors=true in the cfcomponent or ensure that you have the setter functions for the properties defined. 
If you have setter = false for a specific property or if the property is not defined for the CFC, then the value is not set. 
In either case, if there is an onMissingMethod defined for the CFC, it is invoked.

Example 1

In this example, the property firstName is set to the value Tom at the time of CFC instantiation, but the property lastName is not set because it has setter = false. Also, onMissingMethod is invoked in the case of the property lastName.employee.cfm

<cfscript> 
emp = new employee(firstname="Tom", lastname="Nash"); 
writeOutput("<u><b>Employee Details</b></u>: " & "<br><br>"); 
writeOutput("First Name: " & emp.getFirstname() & "<br>"); 
</cfscript>

employee.cfc

<cfcomponent accessors="TRUE"> 
<cfproperty name="firstname" type="string" setter="true"/> 
<cfproperty name="lastname" type="string" setter="false"/> 
<cfproperty name="age" type="numeric"/> 
<cffunction name="onMissingMethod"> 
<cfargument name="missingMethodName"/> 
<cfargument name="missingMethodArguments"/> 

<cfoutput> 
onMissingMethod() called for method call - #arguments.missingMethodName# 
<hr> 
</cfoutput> 
</cffunction> 
</cfcomponent>

Example 2

In this example, both employee1.cfc and employee2.cfc have an init()}}method defined. Therefore, the CFC properties {{firstName and lastName are not initialized. But in the employee.cfc, since there is no init() method defined, property firstName is initialized.employee1.cfc

<cfcomponent accessors="TRUE"> 
<cfproperty name="firstname" type="string" setter="true"/> 
<cfproperty name="lastname" type="string" setter="false"/> 
<cffunction name="init"> 
<cfreturn this> 
</cffunction> 
<cffunction name="onMissingMethod"> 
<cfargument name="missingMethodName"/> 
<cfargument name="missingMethodArguments"/> 
<cfoutput> 
onMissingMethod() called for method call - #arguments.missingMethodName# 
<hr> 
</cfoutput> 
</cffunction> 
</cfcomponent>

employee2.cfc

<cfcomponent accessors="TRUE" initmethod=foo> 
<cfproperty name="firstname" type="string" setter="true"/> 
<cfproperty name="lastname" type="string" setter="false"/> 
<cffunction name="foo"> 
<cfreturn this> 
</cffunction> 
<cffunction name="onMissingMethod"> 
<cfargument name="missingMethodName"/> 
<cfargument name="missingMethodArguments"/> 
<cfoutput> 
onMissingMethod() called for method call - #arguments.missingMethodName# 
<hr> 
</cfoutput> 
</cffunction> 
</cfcomponent>

employee.cfm

<cfscript> 
emp = new employee(firstname="Tom", lastname="Nash"); 
writeOutput("<u><b>Employee Details</b></u>: " & "<br><br>"); 
writeOutput("First Name: " & emp.getFirstname() & "<br>"); 
writeOutput("<hr>"); 
emp1 = new employee1(firstname="Tom", lastname="Nash"); 
writeOutput("First Name: " & emp1.getFirstname() & "<br>"); 
writeOutput("<hr>"); 
emp2 = new employee2(firstname="Tom", lastname="Nash"); 
writeOutput("First Name: " & emp2.getFirstname() & "<br>"); 
writeOutput("<hr>"); 
</cfscript> 
<cfoutput> 
onMissingMethod() called for method call - #arguments.missingMethodName# 
<hr> 
</cfoutput>

Get help faster and easier

New user?