Skip to content

Commit

Permalink
php-generator: fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Mar 28, 2023
1 parent ec22d44 commit e64b397
Show file tree
Hide file tree
Showing 17 changed files with 308 additions and 157 deletions.
27 changes: 18 additions & 9 deletions php-generator/bg/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ echo $class;
*/
final class Demo extends ParentClass implements Countable
{
use Nette\SmartObject;

}
```

Expand All @@ -68,6 +68,7 @@ echo $printer->printClass($class);
```php
$class->addConstant('ID', 123)
->setProtected() // постоянна видимост
->setType('int')
->setFinal();

$class->addProperty('items', [1, 2, 3])
Expand All @@ -83,7 +84,7 @@ $class->addProperty('list')
Той генерира:

```php
final protected const ID = 123;
final protected const int ID = 123;

/** @var int[] */
private static $items = [1, 2, 3];
Expand Down Expand Up @@ -137,7 +138,7 @@ public function __construct(
}
```

Свойствата само за четене, въведени от PHP 8.1, могат да бъдат маркирани чрез `setReadOnly()`.
Свойствата и класовете само за четене могат да бъдат маркирани чрез `setReadOnly()`.

------

Expand Down Expand Up @@ -170,7 +171,7 @@ $class->addMember($methodRecount);
Интерфейс или черта .[#toc-interface-or-trait]
----------------------------------------------

Можете да създавате интерфейси и черти:
Можете да създавате интерфейси и черти (класове [InterfaceType |api:Nette\PhpGenerator\InterfaceType] и [TraitType |api:Nette\PhpGenerator\TraitType]):

```php
$interface = new Nette\PhpGenerator\InterfaceType('MyInterface');
Expand All @@ -194,6 +195,7 @@ echo $class;
class Demo
{
use SmartObject;
/** @use MyTrait<Foo> */
use MyTrait {
sayHello as protected;
}
Expand All @@ -204,7 +206,7 @@ class Demo
Енуми .[#toc-enums]
-------------------

Можете лесно да създадете енумите, които PHP 8.1 въвежда:
Можете лесно да създадете енумите, които PHP 8.1 въвежда (клас [EnumType |api:Nette\PhpGenerator\EnumType]):

```php
$enum = new Nette\PhpGenerator\EnumType('Suit');
Expand Down Expand Up @@ -653,7 +655,7 @@ $class->addImplement('Foo\A') // ще се опрости до A
->addTrait('Bar\AliasedClass'); // ще се опрости до AliasedClass

$method = $class->addMethod('method');
$method->addComment('@return ' . $namespace->simplifyName('Foo\D')); // в коментарите се опростява ръчно
$method->addComment('@return ' . $namespace->simplifyType('Foo\D')); // в коментарите опростете ръчно
$method->addParameter('arg')
->setType('Bar\OtherClass'); // ще се разреши до \Bar\OtherClass

Expand Down Expand Up @@ -758,7 +760,7 @@ $closure = Nette\PhpGenerator\Closure::from(
```

По подразбиране телата на функциите и методите са празни. Ако искате да ги заредите също, използвайте този начин
(той изисква да е инсталиран `nikic/php-parser` ):
(той изисква да е инсталиран `nikic/php-parser`):

```php
$class = Nette\PhpGenerator\ClassType::from(Foo::class, withBodies: true);
Expand All @@ -770,7 +772,7 @@ $function = Nette\PhpGenerator\GlobalFunction::from('foo', withBody: true);
Зареждане от PHP файл .[#toc-loading-from-php-file]
---------------------------------------------------

Можете също така да зареждате класове и функции директно от PHP файл, който не е вече зареден, или от низ от PHP код:
Можете също така да зареждате функции, класове, интерфейси и енуми директно от низ от PHP код. Например, създаваме обект `ClassType` по този начин:

```php
$class = Nette\PhpGenerator\ClassType::fromCode(<<<XX
Expand All @@ -783,14 +785,21 @@ $class = Nette\PhpGenerator\ClassType::fromCode(<<<XX
XX);
```

Зареждане на целия PHP файл, който може да съдържа множество класове или дори множество пространства от имена:
Когато зареждате класове от PHP код, коментарите на един ред извън тялото на метода се игнорират (например за свойства и т.н.), тъй като тази библиотека не разполага с API за работа с тях.

Можете също така да заредите директно целия PHP файл, който може да съдържа произволен брой класове, функции или дори няколко пространства от имена:

```php
$file = Nette\PhpGenerator\PhpFile::fromCode(file_get_contents('classes.php'));
```

Първоначалният коментар на файла и декларацията `strict_types` също се зареждат. От друга страна, всички останали глобални кодове се игнорират.

Това изисква да е инсталиран `nikic/php-parser`.

.[note]
Ако трябва да манипулирате глобален код във файлове или отделни оператори в тялото на метод, по-добре е да използвате директно библиотеката `nikic/php-parser`.


Дъмпер за променливи .[#toc-variables-dumper]
---------------------------------------------
Expand Down
27 changes: 18 additions & 9 deletions php-generator/cs/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Vrátí následující výsledek:
*/
final class Demo extends ParentClass implements Countable
{
use Nette\SmartObject;

}
```

Expand All @@ -68,6 +68,7 @@ Můžeme přidat konstanty (třída [Constant |api:Nette\PhpGenerator\Constant])
```php
$class->addConstant('ID', 123)
->setProtected() // viditelnost konstant
->setType('int')
->setFinal();

$class->addProperty('items', [1, 2, 3])
Expand All @@ -83,7 +84,7 @@ $class->addProperty('list')
Vygeneruje:

```php
final protected const ID = 123;
final protected const int ID = 123;

/** @var int[] */
private static $items = [1, 2, 3];
Expand Down Expand Up @@ -137,7 +138,7 @@ public function __construct(
}
```

Vlastnosti určené pouze pro čtení zavedené v PHP 8.1 lze označit pomocí funkce `setReadOnly()`.
Vlastnosti a třídy určené pouze pro čtení lze označit pomocí funkce `setReadOnly()`.

------

Expand Down Expand Up @@ -170,7 +171,7 @@ $class->addMember($methodRecount);
Interface nebo traita
---------------------

Lze vytvářet rozhraní a traity:
Můžete vytvářet rozhraní a traity (třídy [InterfaceType |api:Nette\PhpGenerator\InterfaceType] a [TraitType |api:Nette\PhpGenerator\TraitType]):

```php
$interface = new Nette\PhpGenerator\InterfaceType('MyInterface');
Expand All @@ -194,6 +195,7 @@ Výsledek:
class Demo
{
use SmartObject;
/** @use MyTrait<Foo> */
use MyTrait {
sayHello as protected;
}
Expand All @@ -204,7 +206,7 @@ class Demo
Enums
-----

Výčty, které přináší PHP 8.1, můžete snadno vytvořit takto:
Výčty, které přináší PHP 8.1, můžete snadno vytvořit takto: (třída [EnumType |api:Nette\PhpGenerator\EnumType]):

```php
$enum = new Nette\PhpGenerator\EnumType('Suit');
Expand Down Expand Up @@ -653,7 +655,7 @@ $class->addImplement('Foo\A') // bude zjednodušen na A
->addTrait('Bar\AliasedClass'); // bude zjednodušen na AliasedClass

$method = $class->addMethod('method');
$method->addComment('@return ' . $namespace->simplifyName('Foo\D')); // v komentářích zjednodušíme manuálně
$method->addComment('@return ' . $namespace->simplifyType('Foo\D')); // v komentářích zjednodušíme manuálně
$method->addParameter('arg')
->setType('Bar\OtherClass'); // bude přeložen na \Bar\OtherClass

Expand Down Expand Up @@ -770,7 +772,7 @@ $function = Nette\PhpGenerator\GlobalFunction::from('foo', withBody: true);
Načítání z PHP souborů
----------------------

Třídy nebo funkce můžete také načíst přímo ze souboru PHP, který ještě není inkludován, nebo z řetězce obsahujícího PHP kód:
Funkce, třídy, rozhraní a enumy můžete načítat také přímo z řetězce obsahujícího PHP kód. Například takto vytvoříme objekt `ClassType`:

```php
$class = Nette\PhpGenerator\ClassType::fromCode(<<<XX
Expand All @@ -783,13 +785,20 @@ $class = Nette\PhpGenerator\ClassType::fromCode(<<<XX
XX);
```

Načtení celého souboru PHP, který může obsahovat více tříd nebo dokonce více jmenných prostorů:
Při načítání tříd z kódu PHP jsou jednořádkové komentáře mimo těla metod ignorovány (např. u properties atd.), protože tato knihovna nemá API pro práci s nimi.

Můžete také načíst přímo celý soubor PHP, který může obsahovat libovolný počet tříd, funkcí nebo dokonce jmenných prostorů:

```php
$file = Nette\PhpGenerator\PhpFile::fromCode(file_get_contents('classes.php'));
```

Vyžaduje, aby byl nainstalován `nikic/php-parser`.
Načte se také úvodní komentář k souboru a deklarace `strict_types`. Naopak veškerý ostatní globální kód je ignorován.

Vyžaduje se, aby byl nainstalován `nikic/php-parser`.

.[note]
Pokud potřebujete manipulovat s globálním kódem v souborech nebo s jednotlivými příkazy v tělech metod, je lepší použít přímo knihovnu `nikic/php-parser`.


Výpis proměnných
Expand Down
27 changes: 18 additions & 9 deletions php-generator/de/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Es wird dieses Ergebnis wiedergeben:
*/
final class Demo extends ParentClass implements Countable
{
use Nette\SmartObject;

}
```

Expand All @@ -68,6 +68,7 @@ Wir können Konstanten (Klasse [Constant |api:Nette\PhpGenerator\Constant]) und
```php
$class->addConstant('ID', 123)
->setProtected() // Konstante Sichtbarkeit
->setType('int')
->setFinal();

$class->addProperty('items', [1, 2, 3])
Expand All @@ -83,7 +84,7 @@ $class->addProperty('list')
Es erzeugt:

```php
final protected const ID = 123;
final protected const int ID = 123;

/** @var int[] */
private static $items = [1, 2, 3];
Expand Down Expand Up @@ -137,7 +138,7 @@ public function __construct(
}
```

Die mit PHP 8.1 eingeführten schreibgeschützten Eigenschaften können über `setReadOnly()` markiert werden.
Readonly-Eigenschaften und -Klassen können über `setReadOnly()` markiert werden.

------

Expand Down Expand Up @@ -170,14 +171,14 @@ $class->addMember($methodRecount);
Schnittstelle oder Trait .[#toc-interface-or-trait]
---------------------------------------------------

Sie können Schnittstellen und Traits erstellen:
Sie können Schnittstellen und Traits (Klassen [InterfaceType |api:Nette\PhpGenerator\InterfaceType] und [TraitType |api:Nette\PhpGenerator\TraitType]) erstellen:

```php
$interface = new Nette\PhpGenerator\InterfaceType('MyInterface');
$trait = new Nette\PhpGenerator\TraitType('MyTrait');
```

Traits verwenden:
Eigenschaften verwenden:

```php
$class = new Nette\PhpGenerator\ClassType('Demo');
Expand All @@ -194,6 +195,7 @@ Ergebnis:
class Demo
{
use SmartObject;
/** @use MyTrait<Foo> */
use MyTrait {
sayHello as protected;
}
Expand All @@ -204,7 +206,7 @@ class Demo
Enums .[#toc-enums]
-------------------

Sie können die Enums, die PHP 8.1 mitbringt, ganz einfach erstellen:
Sie können ganz einfach die Enums erstellen, die PHP 8.1 mitbringt (Klasse [EnumType |api:Nette\PhpGenerator\EnumType]):

```php
$enum = new Nette\PhpGenerator\EnumType('Suit');
Expand Down Expand Up @@ -653,7 +655,7 @@ $class->addImplement('Foo\A') // wird zu A vereinfacht
->addTrait('Bar\AliasedClass'); // es wird zu AliasedClass vereinfacht

$method = $class->addMethod('method');
$method->addComment('@return ' . $namespace->simplifyName('Foo\D')); // in Kommentaren manuell vereinfachen
$method->addComment('@return ' . $namespace->simplifyType('Foo\D')); // in Kommentaren manuell vereinfachen
$method->addParameter('arg')
->setType('Bar\OtherClass'); // es wird in \Bar\OtherClass aufgelöst

Expand Down Expand Up @@ -770,7 +772,7 @@ $function = Nette\PhpGenerator\GlobalFunction::from('foo', withBody: true);
Laden aus PHP-Datei .[#toc-loading-from-php-file]
-------------------------------------------------

Sie können Klassen und Funktionen auch direkt aus einer PHP-Datei laden, die noch nicht geladen ist, oder aus einem String von PHP-Code:
Sie können auch Funktionen, Klassen, Schnittstellen und Enums direkt aus einem String von PHP-Code laden. Zum Beispiel erstellen wir das Objekt `ClassType` auf diese Weise:

```php
$class = Nette\PhpGenerator\ClassType::fromCode(<<<XX
Expand All @@ -783,14 +785,21 @@ $class = Nette\PhpGenerator\ClassType::fromCode(<<<XX
XX);
```

Laden der gesamten PHP-Datei, die mehrere Klassen oder sogar mehrere Namespaces enthalten kann:
Beim Laden von Klassen aus PHP-Code werden einzeilige Kommentare außerhalb von Methodenkörpern ignoriert (z. B. für Eigenschaften usw.), da diese Bibliothek keine API hat, um mit ihnen zu arbeiten.

Sie können auch die gesamte PHP-Datei direkt laden, die eine beliebige Anzahl von Klassen, Funktionen oder sogar mehrere Namespaces enthalten kann:

```php
$file = Nette\PhpGenerator\PhpFile::fromCode(file_get_contents('classes.php'));
```

Der anfängliche Dateikommentar und die Erklärung `strict_types` werden ebenfalls geladen. Alle anderen globalen Codes werden dagegen ignoriert.

Dazu muss `nikic/php-parser` installiert sein.

.[note]
Wenn Sie globalen Code in Dateien oder einzelne Anweisungen in Methodenkörpern manipulieren müssen, ist es besser, die Bibliothek `nikic/php-parser` direkt zu verwenden.


Variablen-Dumper .[#toc-variables-dumper]
-----------------------------------------
Expand Down
Loading

0 comments on commit e64b397

Please sign in to comment.