# Componere

# Introdução

Componere (latim, português: compor) tem como alvo ambientes de produção e fornece uma API para composição de classes, alteração dinâmica de código durante a execução e conversões.

##### Composição:

Componere\Definition é usado para definir (ou redefinir) uma classe em tempo de execução; A classe pode então ser registrada, e no caso de redefinição ela substitui a classe original enquanto o Componere\Definition existir.

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

##### Alteração dinâmica:

Componere\Patch é usado para alterar a classe de uma instância específica de um objeto em tempo de execução; Após a aplicação, o patch permanecerá aplicado enquanto o Componere\Patch existir e poderá ser revertido explicitamente.

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

##### Conversão:

As funções de conversão do Componere\ podem converter entre tipos compatíveis definidos pelo usuário; Onde compatível significa que Type é sub ou super ao tipo de `object`.

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

- Instalação/Configuração
  - Dependências
  - Instalação
- Componere\Abstract\Definition — A classe Componere\Abstract\Definition
  - Componere\Abstract\Definition::addInterface — Adiciona Interface
  - Componere\Abstract\Definition::addMethod — Adiciona método
  - Componere\Abstract\Definition::addTrait — Adiciona Trait
  - Componere\Abstract\Definition::getReflector — Cria ou obtém uma reflexão
- Componere\Definition — A classe Componere\Definition
  - Componere\Definition::__construct — Construção da definição
  - Componere\Definition::addConstant — Adiciona constante
  - Componere\Definition::addProperty — Adiciona propriedade
  - Componere\Definition::register — Registro
  - Componere\Definition::isRegistered — Detecção de estado
  - Componere\Definition::getClosure — Obtém Closure
  - Componere\Definition::getClosures — Obtém Closures
- Componere\Patch — A classe Componere\Patch
  - Componere\Patch::__construct — Construção de Patch
  - Componere\Patch::apply — Aplica o patch
  - Componere\Patch::revert — Reversão
  - Componere\Patch::isApplied — Definição de estado
  - Componere\Patch::derive — Derivaçaõ de Patch
  - Componere\Patch::getClosure — Obtém Closure
  - Componere\Patch::getClosures — Obtém Closures
- Componere\Method — A classe Componere\Method
  - Componere\Method::__construct — Construção de método
  - Componere\Method::setPrivate — Modificação de acessibilidade
  - Componere\Method::setProtected — Modificação de acessibilidade
  - Componere\Method::setStatic — Modificação de acessibilidade
  - Componere\Method::getReflector — Cria ou obtém Reflexão
- Componere\Value — A classe Componere\Value
  - Componere\Value::__construct — Construção de Valor
  - Componere\Value::setPrivate — Modificação de acessibilidade
  - Componere\Value::setProtected — Modificação de acessibilidade
  - Componere\Value::setStatic — Modificação de acessibilidade
  - Componere\Value::isPrivate — Detecção de acessibilidade
  - Componere\Value::isProtected — Detecção de acessibilidade
  - Componere\Value::isStatic — Detecção de acessibilidade
  - Componere\Value::hasDefault — Intereção de Valor
- Funções de Componere
  - Componere\cast — Conversão
  - Componere\cast_by_ref — Conversão

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open