PHPackages                             damian\_jozwiak/code\_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. damian\_jozwiak/code\_generator

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

damian\_jozwiak/code\_generator
===============================

Code generator is a PHP tool that provides an interface for generating code

v1.0.2(3y ago)045PHPPHP ^8.1

Since Aug 24Pushed 3y ago1 watchersCompare

[ Source](https://github.com/damek24/code_generator)[ Packagist](https://packagist.org/packages/damian_jozwiak/code_generator)[ RSS](/packages/damian-jozwiak-code-generator/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (1)Versions (3)Used By (0)

Code generator
==============

[](#code-generator)

Originally inspired by

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

[](#installation)

Require the package using composer `composer require damian_jozwiak/code_generator --dev`. PHP 8 required

Usage
-----

[](#usage)

```
use DamianJozwiak\CodeGenerator\Enums\AccessEnum;
use DamianJozwiak\CodeGenerator\Model\Component\ArgumentComponent;
use DamianJozwiak\CodeGenerator\Model\Component\ClassNameComponent;
use DamianJozwiak\CodeGenerator\Model\Component\ConstantComponent;
use DamianJozwiak\CodeGenerator\Model\Component\DocBlockComponent;
use DamianJozwiak\CodeGenerator\Model\Component\MethodComponent;
use DamianJozwiak\CodeGenerator\Model\Component\NamespaceComponent;
use DamianJozwiak\CodeGenerator\Model\Component\PropertyComponent;
use DamianJozwiak\CodeGenerator\Model\Component\UseComponent;
use DamianJozwiak\CodeGenerator\Model\Component\VirtualMethodComponent;
use DamianJozwiak\CodeGenerator\Model\Component\VirtualPropertyComponent;
use DamianJozwiak\CodeGenerator\Model\Generators\ClassGenerator;

$vp = new VirtualPropertyComponent('propertyFour', AccessEnum::PUBLIC, type: 'int');
$vm = new VirtualMethodComponent('methodFour', AccessEnum::UNDEFINED, static: true, returnType: 'void');
$generator = new ClassGenerator(
     name: new ClassNameComponent('Foo', extends: 'Bar', implements: ['A', 'B']),
     namespace: new NamespaceComponent('Test\\Files'),
     doc: new DocBlockComponent([
         'class summary',
          $vp->render(indent: 0),
          $vm->render(indent: 0),
          ])
     );
$generator->addUseClass(new UseComponent('Test\\A'));
$generator->addUseTrait(new UseComponent('TraitOne'));
$generator->addConstant(new ConstantComponent('propertyOne', 5, AccessEnum::PUBLIC));
$generator->addProperty(new PropertyComponent('propertyTwo', AccessEnum::PROTECTED));
$generator->addProperty(
    new PropertyComponent(
        'propertyThree',
        access: AccessEnum::PRIVATE,
        type: 'int',
        value: 5,
        useDefault: true
    )
);
$doc = new DocBlockComponent(['method', 'multiline', 'description']);
$generator->addMethod(new MethodComponent('methodOne', AccessEnum::PROTECTED, static: true));
$method = new MethodComponent('methodTwo', AccessEnum::PRIVATE, returnType: 'array', docBlock: $doc);
$method->addArgument(new ArgumentComponent('argumentOne', type: 'int', default: 5, useDefault: true));
$method->setBody(['return [];']);
$generator->addMethod($method);
$s = DIRECTORY_SEPARATOR;
$path = dirname(__DIR__, 2) . $s . 'mocks' . $s . 'test.php';
$content = file_get_contents($path);
file_put_contents('test.php', $generator->render(0));
$this->assertEquals($content, $generator->render(0));
```

Output

```
