> For the complete documentation index, see [llms.txt](https://quantumphp.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://quantumphp.gitbook.io/docs/packages/transformer/contracts.md).

# Contracts

## Transformer interface

Every transformer implements `Quantum\Transformer\Contracts\TransformerInterface`.

```php
interface TransformerInterface
{
    public function transform($item);
}
```

The contract stays deliberately open:

* `$item` may be any value
* the return value may be any value

In most applications, transformers return arrays that are ready for JSON responses or view data.

## Collection transform contract

`Quantum\Transformer\Transformer::transform()` accepts:

* `array $data`
* `TransformerInterface $transformer`

and returns a transformed array.

```php
$result = Transformer::transform($data, $transformer);
```

Behavior that matters in real usage:

* the transformer runs once for each input item
* the same transformer instance handles the full collection
* the returned array keeps input order
* associative keys stay attached to their transformed values
* the callback receives each item value, without array keys

## Type boundaries

With `strict_types=1` and concrete parameter types, PHP enforces the package boundary at the method signature.

That means:

* pass an array as the first argument
* pass an object that implements `TransformerInterface` as the second argument

PHP raises `TypeError` when either argument falls outside that contract.

## Exception and return-value flow

The package forwards the result of each `transform()` call directly into the returned array.

Practical effect:

* exceptions from your transformer move upward unchanged
* mixed return types remain mixed in the final array

This keeps the package predictable and leaves output policy inside your transformer class.

## Stateless package contract

`Transformer::transform()` is static and carries no package-level cache or shared state.

Each call depends on:

* the array you pass in
* the transformer object you pass in


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://quantumphp.gitbook.io/docs/packages/transformer/contracts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
