PHPackages                             lukaszmakuch/text-generator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. lukaszmakuch/text-generator

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

lukaszmakuch/text-generator
===========================

Converts anything to text. Works like a toString implementation, but outside the object.

v0.4(10y ago)0118—0%1MITPHP

Since Apr 16Pushed 10y ago1 watchersCompare

[ Source](https://github.com/lukaszmakuch/text-generator)[ Packagist](https://packagist.org/packages/lukaszmakuch/text-generator)[ RSS](/packages/lukaszmakuch-text-generator/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (3)Versions (5)Used By (1)

[![travis](https://camo.githubusercontent.com/def055de8cdce179e570253c84494339e1945c8353c7452d43300559ed052698/68747470733a2f2f7472617669732d63692e6f72672f6c756b61737a6d616b7563682f746578742d67656e657261746f722e737667)](https://travis-ci.org/lukaszmakuch/text-generator)

TextGenerator
=============

[](#textgenerator)

Converts anything to text. Works like a *toString* implementation, but outside the object.

Brief description
-----------------

[](#brief-description)

For more details, check unit tests.

### TextGenerator

[](#textgenerator-1)

It's the base interface. It takes some input and returns a textual representation of it, or throws an exception if it's not supported.

```
use lukaszmakuch\TextGenerator\TextGenerator;
use lukaszmakuch\TextGenerator\Exception\UnableToGetText;

/* @var $textGenerator TextGenerator */
try {
    echo $textGenerator->getTextBasedOn($anything);
} catch (UnableToGetText $e) {
    echo $e->getMessage();
}
```

### ClassBasedTextGenerator

[](#classbasedtextgenerator)

Takes into account nothing but the class of a given object.

```
use lukaszmakuch\TextGenerator\ClassBasedTextGenerator;

/* @var $textGenerator ClassBasedTextGenerator */
$textGenerator->addTextualRepresentationOf(
    \DateTime::class,
    "a DateTime object"
);
echo $textGenerator->getTextBasedOn(new \DateTime()); //"a DateTime object"
```

### ObjectToTextConverter

[](#objecttotextconverter)

Template of a generator that converts an object to text.

```
use lukaszmakuch\TextGenerator\ObjectToTextConverter;

class DateTimeTextPresenter extends ObjectToTextConverter
{
    protected function getClassOfSupportedObjects()
    {
        return \DateTime::class;
    }

    protected function getTextBasedOnObject($object)
    {
        /* @var $object \DateTime */
        return $object->format("It's " . $object->format("Y"));
    }
}

$textGenerator = new DateTimeTextPresenter();
echo $textGenerator->getTextBasedOn(new \DateTime("2016-01-01")); //"It's 2016"
```

### TextGeneratorWithDefaultText

[](#textgeneratorwithdefaulttext)

Decorator that returns some default text if the decorated one doesn't support the given input.

```
use lukaszmakuch\TextGenerator\TextGeneratorWithDefaultText;
use lukaszmakuch\TextGenerator\TextGenerator;

$textGenerator = new TextGeneratorWithDefaultText(
    /* @var $actualGenerator TextGenerator */
    $actualGenerator,
    "default text if the input is not supported"
);
```

### NULLTextGenerator

[](#nulltextgenerator)

Returns an empty string for any given input.

```
use lukaszmakuch\TextGenerator\NULLTextGenerator;

$textGenerator = NULLTextGenerator::getInstance();
$textGenerator->getTextBasedOn($anything); //an empty string
```

### StaticTextGenerator

[](#statictextgenerator)

Always returns the same text regardless what is the input.

```
use lukaszmakuch\TextGenerator\StaticTextGenerator;

(new StaticTextGenerator("abc"))->getTextBasedOn("anything"); //abc
```

### SimpleTextGeneratorProxy

[](#simpletextgeneratorproxy)

Hides some actual implementation under the hood. Useful when solving circular dependencies.

```
use lukaszmakuch\TextGenerator\SimpleTextGeneratorProxy;
use lukaszmakuch\TextGenerator\TextGenerator;

/* @var $actualGenerator TextGenerator */
$textGenerator = new SimpleTextGeneratorProxy();
$textGenerator->setActualGenerator(actualGenerator)
```

### ClassBasedTextGeneratorProxy

[](#classbasedtextgeneratorproxy)

Delegates work based on the class of a given object.

```
use lukaszmakuch\TextGenerator\SimpleTextGeneratorProxy;
use lukaszmakuch\TextGenerator\TextGenerator;

/* @var $dateTimeTextGenerator TextGenerator */
/* @var $someClassObjectsTextGenerator TextGenerator */
$textGenerator = new ClassBasedTextGeneratorProxy();
$textGenerator->registerActualGenerator(
    \DateTime::class,
    $dateTimeTextGenerator
);
$textGenerator->registerActualGenerator(
    SomeClass::class,
    $someClassObjectsTextGenerator
);
```

### ChainOfTextGenerators

[](#chainoftextgenerators)

Returns the value generated by the first generator that is able to generate any output based on the given input.

```
use lukaszmakuch\TextGenerator\TextGenerator;
use lukaszmakuch\TextGenerator\ChainOfTextGenerators;

$chain = (new ChainOfTextGenerators())
    ->add($ifThisGeneratorFails)
    ->add($thisOneIsUsed)
    ->add($andIfItFailsThenThisOneIsUsed);
```

Installation
------------

[](#installation)

Use [composer](https://getcomposer.org) to get the latest version:

```
$ composer require lukaszmakuch/text-generator

```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

4

Last Release

3668d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5e08a5c26bd9824a0345f417660e2d1146f044c886266daf2dd0901720fbcf32?d=identicon)[lukaszmakuch](/maintainers/lukaszmakuch)

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/lukaszmakuch-text-generator/health.svg)

```
[![Health](https://phpackages.com/badges/lukaszmakuch-text-generator/health.svg)](https://phpackages.com/packages/lukaszmakuch-text-generator)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
