Baseという次のコンポーネントがあるとします。
<cfcomponent output="false">
<cffunction name="init" access="public" returntype="Any" output="false">
<cfset variables.metadata = getmetadata(this)>
<cfreturn this>
</cffunction>
<cffunction name="getmeta" access="public" returntype="Any" output="false">
<cfreturn variables.metadata>
</cffunction>
</cfcomponent>
Adminという別のコンポーネントでベースを拡張したい:
<cfcomponent output="false" extends="Base">
</cfcomponent>
オブジェクトを作成するときに次のようにすると、アプリケーション内で次のようになります。
<cfset obj = createobject("component", "Admin").init()>
<cfdump var="#obj.getmeta()#">
返されたメタデータは、コンポーネントの名前がAdminであり、それがBaseコンポーネントを拡張していることを示しています。これで問題ありませんが、オブジェクトを作成するときにinit()メソッドを明示的に呼び出す必要はありません。
Baseコンポーネントで次のようなことができればいいのですが。
<cfcomponent output="false">
<cfset init()>
<cffunction name="init" access="public" returntype="Any" output="false">
<cfset variables.metadata = getmetadata(this)>
<cfreturn this>
</cffunction>
<cffunction name="getmeta" access="public" returntype="Any" output="false">
<cfreturn variables.metadata>
</cffunction>
</cfcomponent>
ただし、 getmeta() メソッドによって返されるメタデータは、コンポーネント名がまだ拡張中であるにもかかわらずBaseであることを示しています。これを達成する方法について何か考えはありますか?