This library can be used to generate or idempotently add classes, methods, properties, use statements, etc. to existing source code using prototypes.
A prototype is an object which defines structural code elements.
The library provides a source code prototype builder:
$builder = SourceBuilder::create()
->namespace('Animals');
->use('Measurements\\Height');
->class('Rabbits')
->extends('Leopridae')
->property('force')
->visibility('private')
->type('int')
->defaultValue(5)
->end()
->method('jump')
->parameters()
->parameter('how')
->default('high')
->type('Height')
->end();
->end()
->end()
->end();
$sourcePrototype = $builder->build();
the above prototype can either be used to generate a new class:
$renderer = new TwigRenderer();
$renderer->render($sourcePrototype);
Or it can be applied to an existing source code, given the following:
<?php
class Rabbits
{
}
When we do:
$updater = new TolerantUpdater();
$updater->apply($sourcePrototype, Code::fromString(file_get_contents('Rabbits.php')));
Then we get:
<?php
namespace Animals;
use Measurements\Height;
class Rabbits extends Leopridae
{
private $force = 5;
public function jump(Height $how = 'high')
{
}
}
This library is part of the phpactor project.