# Introduction

Componere (latin, English: compose) targets production environments and provides an API for composition of classes, monkey patching, and casting.

##### Composition:

Componere\Definition is used to define (or redefine) a class at runtime; The class can then be registered, and in the case of redefinition it replaces the original class for as long as the Componere\Definition exists.

public Componere\Definition::__construct ( string `$name` )
public Componere\Definition::__construct ( string `$name` , string `$parent` )
public Componere\Definition::__construct ( string `$name` , array `$interfaces` )
public Componere\Definition::__construct ( string `$name` , string `$parent` , array `$interfaces` )

##### Patching:

Componere\Patch is used to change the class of a specific instance of an object at runtime; Upon application the patch will remain applied for as long as the Componere\Patch exists, and can be reverted explicitly.

public Componere\Patch::__construct ( object `$instance` )
public Componere\Patch::__construct ( object `$instance` , array `$interfaces` )

##### Casting:

Componere\ casting functions can cast among user defined compatible types; Where compatible means Type is sub or super to the type of `object`.

Componere\cast ( Type `$type` , `$object` ) : Type
Componere\cast_by_ref ( Type `$type` , `$object` ) : Type