Skip to content
Permalink
Browse files

php-generator: updated for v3.2

  • Loading branch information...
dg committed Aug 9, 2018
1 parent 5824b8b commit 2f513627957a6efee9a94f9ddb9bd46a7dc0f17b
Showing with 96 additions and 8 deletions.
  1. +48 −4 cs/php-generator.texy
  2. +48 −4 en/php-generator.texy
@@ -89,6 +89,8 @@ Výsledkem je:

Pokud vlastnost, konstanta, metoda nebo parametr již existuje, bude přepsán.

Členy třídy lze odebrat pomocí `removeProperty()`, `removeConstant()`, `removeMethod()` nebo `removeParameter()`.

PHP Generator podporuje všechny nové vlastnosti PHP 7.3:

/--php
@@ -123,21 +125,44 @@ class Demo
}
\--

Do třídy můžete také přidat existující objekty `Method`, `Property` nebo `Constant`:

/--php
$method = new Nette\PhpGenerator\Method('getHandle');
$property = new Nette\PhpGenerator\Property('handle');
$const = new Nette\PhpGenerator\Constant('ROLE');

$class = (new Nette\PhpGenerator\ClassType('Demo'))
->addMember($method)
->addMember($property)
->addMember($const);
\--

Můžete také klonovat stávající metody, vlastnosti a konstanty pod jiným názvem pomocí `cloneWithName()`:

/--php
$methodCount = $class->getMethod('count');
$methodRecount = $methodCount->cloneWithName('recount');
$class->addMember($methodRecount);
\--

Tabulátory versus mezery
------------------------

Vygenerovaný kód používá pro odsazování tabulátory, díky čemuž je lze snadno změnit na libovolný počet mezer:
Vygenerovaný kód používá tabulátory pro odsazení. Pokud chcete mít výstup kompatibilní s PSR-2 nebo PSR-12, použijte `PsrPrinter`:

/--php
use Nette\PhpGenerator\Helpers;
$printer = new Nette\PhpGenerator\PsrPrinter;

$class = new Nette\PhpGenerator\ClassType('Demo');
// ...

echo Helpers::tabsToSpaces((string) $class); // odsazení 4 mezerami
echo Helpers::tabsToSpaces((string) $class, 2); // odsazení 2 mezerami
echo $printer->printClass($class); // odsazení 4 mezerami
\--

Může jej použít pro funkce, closury, jmenné prostory apod.


Literály
--------

@@ -231,6 +256,9 @@ $function->setBody('return $a + $b;');
$function->addParameter('a');
$function->addParameter('b');
echo $function;

// nebo použijte PsrPrinter pro výstup kompatibilní s PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printFunction($function);
\--

Výsledek:
@@ -255,6 +283,9 @@ $closure->addParameter('b');
$closure->addUse('c')
->setReference();
echo $closure;

// nebo použijte PsrPrinter pro výstup kompatibilní s PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printClosure($closure);
\--

Výsledek:
@@ -338,6 +369,10 @@ $namespace = new Nette\PhpGenerator\PhpNamespace('Foo');
$class = $namespace->addClass('Task');
$interface = $namespace->addInterface('Countable');
$trait = $namespace->addTrait('NameAware');

// nebo
$class = new Nette\PhpGenerator\ClassType('Task');
$namespace->add($class);
\--

Pokud třída již existuje, bude přepsána.
@@ -367,6 +402,9 @@ $method->addParameter('arg')
->setTypeHint('Bar\OtherClass'); // bude přeložen na \Bar\OtherClass

echo $namespace;

// nebo použijte PsrPrinter pro výstup kompatibilní s PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printNamespace($namespace);
\--

Výsledek:
@@ -397,12 +435,16 @@ Soubory PHP mohou obsahovat více tříd, jmenných prostorů a komentářů:
/--php
$file = new Nette\PhpGenerator\PhpFile;
$file->addComment('This file is auto-generated.');
$file->setStrictTypes(); // přidá declare(strict_types=1)

$namespace = $file->addNamespace('Foo');
$class = $namespace->addClass('A');
$class->addMethod('hello');

echo $file;

// nebo použijte PsrPrinter pro výstup kompatibilní s PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printFile($file);
\--

Výsledek:
@@ -414,6 +456,8 @@ Výsledek:
* This file is auto-generated.
*/

declare(strict_types=1);

namespace Foo;

class A
@@ -89,6 +89,8 @@ It results in:

If the property, constant, method or parameter already exist, it will be overwritten.

Members can be removed using `removeProperty()`, `removeConstant()`, `removeMethod()` or `removeParameter()`.

PHP Generator supports all new PHP 7.3 features:

/--php
@@ -123,21 +125,44 @@ class Demo
}
\--

You can also add existing `Method`, `Property` or `Constant` objects to the class:

/--php
$method = new Nette\PhpGenerator\Method('getHandle');
$property = new Nette\PhpGenerator\Property('handle');
$const = new Nette\PhpGenerator\Constant('ROLE');

$class = (new Nette\PhpGenerator\ClassType('Demo'))
->addMember($method)
->addMember($property)
->addMember($const);
\--

You can clone existing methods, properties and constants with a different name using `cloneWithName()`:

/--php
$methodCount = $class->getMethod('count');
$methodRecount = $methodCount->cloneWithName('recount');
$class->addMember($methodRecount);
\--

Tabs versus spaces
------------------

The generated code uses tabs for indentation, which makes it very easy to change it to any number of spaces:
The generated code uses tabs for indentation. If you want to have the output compatible with PSR-2 or PSR-12, use `PsrPrinter`:

/--php
use Nette\PhpGenerator\Helpers;
$printer = new Nette\PhpGenerator\PsrPrinter;

$class = new Nette\PhpGenerator\ClassType('Demo');
// ...

echo Helpers::tabsToSpaces((string) $class); // 4 spaces indentation
echo Helpers::tabsToSpaces((string) $class, 2); // 2 spaces indentation
echo $printer->printClass($class); // 4 spaces indentation
\--

It can be used also for functions, closures, namespaces etc.


Literals
--------

@@ -231,6 +256,9 @@ $function->setBody('return $a + $b;');
$function->addParameter('a');
$function->addParameter('b');
echo $function;

// or use PsrPrinter for output compatible with PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printFunction($function);
\--

Result:
@@ -255,6 +283,9 @@ $closure->addParameter('b');
$closure->addUse('c')
->setReference();
echo $closure;

// or use PsrPrinter for output compatible with PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printClosure($closure);
\--

Result:
@@ -338,6 +369,10 @@ $namespace = new Nette\PhpGenerator\PhpNamespace('Foo');
$class = $namespace->addClass('Task');
$interface = $namespace->addInterface('Countable');
$trait = $namespace->addTrait('NameAware');

// or
$class = new Nette\PhpGenerator\ClassType('Task');
$namespace->add($class);
\--

If the class already exists, it will be overwritten.
@@ -367,6 +402,9 @@ $method->addParameter('arg')
->setTypeHint('Bar\OtherClass'); // it will resolve to \Bar\OtherClass

echo $namespace;

// or use PsrPrinter for output compatible with PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printNamespace($namespace);
\--

Result:
@@ -397,12 +435,16 @@ PHP files can contains multiple classes, namespaces and comments:
/--php
$file = new Nette\PhpGenerator\PhpFile;
$file->addComment('This file is auto-generated.');
$file->setStrictTypes(); // adds declare(strict_types=1)

$namespace = $file->addNamespace('Foo');
$class = $namespace->addClass('A');
$class->addMethod('hello');

echo $file;

// or use PsrPrinter for output compatible with PSR-2 / PSR-12
// echo (new Nette\PhpGenerator\PsrPrinter)->printFile($file);
\--

Result:
@@ -414,6 +456,8 @@ Result:
* This file is auto-generated.
*/

declare(strict_types=1);

namespace Foo;

class A

0 comments on commit 2f51362

Please sign in to comment.
You can’t perform that action at this time.