Skip to content

Commit

Permalink
nette/php-generator 4.1.7
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Nov 29, 2024
1 parent cfaa617 commit d280c3e
Show file tree
Hide file tree
Showing 17 changed files with 1,462 additions and 68 deletions.
90 changes: 86 additions & 4 deletions php-generator/bg/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<div class=perex>
Търсите ли инструмент за генериране на PHP код за класове, функции или цели файлове?

- Поддържа всички най-нови функции на PHP (като enums и др.)
- Поддържа всички най-нови функции на PHP (като кукички за свойства, енуми, атрибути и др.)
- Позволява ви лесно да променяте съществуващи класове
- Изход, съвместим със стила на кодиране PSR-12 / PER
- Зряла, стабилна и широко използвана библиотека
Expand Down Expand Up @@ -634,6 +634,88 @@ class Demo
```


Куки за имоти .[#toc-property-hooks]
------------------------------------

Можете също така да дефинирате куки за свойства (представени от класа [PropertyHook |api:Nette\PhpGenerator\PropertyHook]) за операции get и set - функция, въведена в PHP 8.4:

```php
$class = new Nette\PhpGenerator\ClassType('Demo');
$prop = $class->addProperty('firstName')
->setType('string');

$prop->addHook('set', 'strtolower($value)')
->addParameter('value')
->setType('string');

$prop->addHook('get')
->setBody('return ucfirst($this->firstName);');

echo $class;
```

Това генерира:

```php
class Demo
{
public string $firstName {
set(string $value) => strtolower($value);
get {
return ucfirst($this->firstName);
}
}
}
```

Свойствата и куките за свойства могат да бъдат абстрактни или окончателни:

```php
$class->addProperty('id')
->setType('int')
->addHook('get')
->setAbstract();

$class->addProperty('role')
->setType('string')
->addHook('set', 'strtolower($value)')
->setFinal();
```


Асиметрична видимост .[#toc-asymmetric-visibility]
--------------------------------------------------

В PHP 8.4 е въведена асиметрична видимост за свойствата. Можете да зададете различни нива на достъп за четене и писане.

Видимостта може да бъде зададена или чрез метода `setVisibility()` с два параметъра, или чрез използване на `setPublic()`, `setProtected()` или `setPrivate()` с параметъра `mode`, който определя дали видимостта се отнася за получаване или задаване на свойството. Режимът по подразбиране е `'get'`.

```php
$class = new Nette\PhpGenerator\ClassType('Demo');

$class->addProperty('name')
->setType('string')
->setVisibility('public', 'private'); // public for read, private for write

$class->addProperty('id')
->setType('int')
->setProtected('set'); // protected for write

echo $class;
```

По този начин се генерира:

```php
class Demo
{
public private(set) string $name;

protected(set) int $id;
}
```


Пространство от имена .[#toc-namespace]
---------------------------------------

Expand Down Expand Up @@ -867,10 +949,10 @@ $property = $manipulator->inheritProperty('foo');
$property->setValue('new value');
```

Методът `implementInterface()` автоматично имплементира всички методи от дадения интерфейс във вашия клас:
Методът `implement()` автоматично имплементира всички методи и свойства от дадения интерфейс или абстрактен клас:

```php
$manipulator->implementInterface(SomeInterface::class);
$manipulator->implement(SomeInterface::class);
// Сега вашият клас имплементира SomeInterface и включва всички негови методи
```

Expand All @@ -892,6 +974,6 @@ echo $dumper->dump($var); // отпечатва ['a', 'b', 123]
Таблица за съвместимост .[#toc-compatibility-table]
---------------------------------------------------

PhpGenerator 4.0 и 4.1 са съвместими с PHP 8.0 до 8.3
PhpGenerator 4.1 е съвместим с PHP 8.0 до 8.4.

{{leftbar: nette:@menu-topics}}
90 changes: 86 additions & 4 deletions php-generator/cs/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Generátor PHP kódu
<div class="perex">
Hledáte nástroj pro generování PHP kódu tříd, funkcí či kompletních souborů?

- Umí všechny nejnovější vychytávky v PHP (jako enumy atd.)
- Umí všechny nejnovější vychytávky v PHP (jako property hooks, enumy, atributy atd.)
- Umožní vám snadno modifikovat existující třídy
- Výstupní kód je v souladu s PSR-12 / PER coding style
- Zralá, stabilní a široce používaná knihovna
Expand Down Expand Up @@ -634,6 +634,88 @@ class Demo
```


Property Hooks
--------------

Pomocí property hooks (reprezentované třídou [PropertyHook|api:Nette\PhpGenerator\PropertyHook]) můžete definovat operace get a set pro vlastnosti, což je funkce zavedená v PHP 8.4:

```php
$class = new Nette\PhpGenerator\ClassType('Demo');
$prop = $class->addProperty('firstName')
->setType('string');

$prop->addHook('set', 'strtolower($value)')
->addParameter('value')
->setType('string');

$prop->addHook('get')
->setBody('return ucfirst($this->firstName);');

echo $class;
```

Vygeneruje:

```php
class Demo
{
public string $firstName {
set(string $value) => strtolower($value);
get {
return ucfirst($this->firstName);
}
}
}
```

Property a property hooks mohou být abstraktní nebo finální:

```php
$class->addProperty('id')
->setType('int')
->addHook('get')
->setAbstract();

$class->addProperty('role')
->setType('string')
->addHook('set', 'strtolower($value)')
->setFinal();
```


Asymetrická viditelnost
-----------------------

PHP 8.4 zavádí asymetrickou viditelnost pro vlastnosti. Můžete nastavit různé úrovně přístupu pro čtení a zápis.

Viditelnost lze nastavit buď pomocí metody `setVisibility()` se dvěma parametry, nebo pomocí `setPublic()`, `setProtected()` nebo `setPrivate()` s parametrem `mode`, který určuje, zda se viditelnost vztahuje ke čtení nebo zápisu vlastnosti. Výchozí režim je `'get'`.

```php
$class = new Nette\PhpGenerator\ClassType('Demo');

$class->addProperty('name')
->setType('string')
->setVisibility('public', 'private'); // public pro čtení, private pro zápis

$class->addProperty('id')
->setType('int')
->setProtected('set'); // protected pro zápis

echo $class;
```

Vygeneruje:

```php
class Demo
{
public private(set) string $name;

protected(set) int $id;
}
```


Jmenný prostor
--------------

Expand Down Expand Up @@ -867,10 +949,10 @@ $property = $manipulator->inheritProperty('foo');
$property->setValue('new value');
```

Metoda `implementInterface()` automaticky implementuje všechny metody z daného rozhraní ve vaší třídě:
Metoda `implement()` automaticky implementuje všechny metody a vlastnosti z daného rozhraní nebo abstraktní třídy ve vaší třídě:

```php
$manipulator->implementInterface(SomeInterface::class);
$manipulator->implement(SomeInterface::class);
// Nyní vaše třída implementuje SomeInterface a obsahuje všechny jeho metody
```

Expand All @@ -892,6 +974,6 @@ echo $dumper->dump($var); // vypíše ['a', 'b', 123]
Tabulka kompatibility
---------------------

PhpGenerator 4.0 a 4.1 jsou kompatibilní s PHP 8.0 až 8.3.
PhpGenerator 4.1 je kompatibilní s PHP 8.0 až 8.4.

{{leftbar: nette:@menu-topics}}
90 changes: 86 additions & 4 deletions php-generator/de/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ PHP-Code-Generator
<div class=perex>
Suchen Sie ein Tool, um PHP-Code für Klassen, Funktionen oder komplette Dateien zu generieren?

- Unterstützt alle aktuellen PHP-Funktionen (wie Enums, etc.)
- Unterstützt alle aktuellen PHP-Funktionen (wie Property Hooks, Enums, Attribute usw.)
- Ermöglicht die einfache Änderung bestehender Klassen
- Ausgabe in Übereinstimmung mit PSR-12 / PER-Kodierung
- Ausgereifte, stabile und weit verbreitete Bibliothek
Expand Down Expand Up @@ -634,6 +634,88 @@ class Demo
```


Eigentumshaken .[#toc-property-hooks]
-------------------------------------

Sie können auch Property Hooks (repräsentiert durch die Klasse [PropertyHook |api:Nette\PhpGenerator\PropertyHook]) für Get- und Set-Operationen definieren, eine Funktion, die in PHP 8.4 eingeführt wurde:

```php
$class = new Nette\PhpGenerator\ClassType('Demo');
$prop = $class->addProperty('firstName')
->setType('string');

$prop->addHook('set', 'strtolower($value)')
->addParameter('value')
->setType('string');

$prop->addHook('get')
->setBody('return ucfirst($this->firstName);');

echo $class;
```

Dies erzeugt:

```php
class Demo
{
public string $firstName {
set(string $value) => strtolower($value);
get {
return ucfirst($this->firstName);
}
}
}
```

Eigenschaften und Eigenschaftshaken können abstrakt oder endgültig sein:

```php
$class->addProperty('id')
->setType('int')
->addHook('get')
->setAbstract();

$class->addProperty('role')
->setType('string')
->addHook('set', 'strtolower($value)')
->setFinal();
```


Asymmetrische Sichtbarkeit .[#toc-asymmetric-visibility]
--------------------------------------------------------

PHP 8.4 führt eine asymmetrische Sichtbarkeit für Eigenschaften ein. Sie können unterschiedliche Zugriffsebenen für das Lesen und Schreiben festlegen.

Die Sichtbarkeit kann entweder mit der Methode `setVisibility()` mit zwei Parametern oder mit `setPublic()`, `setProtected()` oder `setPrivate()` mit dem Parameter `mode` eingestellt werden, der angibt, ob die Sichtbarkeit für das Abrufen oder Setzen der Eigenschaft gilt. Der Standardmodus ist `'get'`.

```php
$class = new Nette\PhpGenerator\ClassType('Demo');

$class->addProperty('name')
->setType('string')
->setVisibility('public', 'private'); // public for read, private for write

$class->addProperty('id')
->setType('int')
->setProtected('set'); // protected for write

echo $class;
```

Dies erzeugt:

```php
class Demo
{
public private(set) string $name;

protected(set) int $id;
}
```


Namensraum .[#toc-namespace]
----------------------------

Expand Down Expand Up @@ -867,10 +949,10 @@ $property = $manipulator->inheritProperty('foo');
$property->setValue('new value');
```

Die Methode `implementInterface()` implementiert automatisch alle Methoden der angegebenen Schnittstelle in Ihrer Klasse:
Die Methode `implement()` implementiert automatisch alle Methoden und Eigenschaften der angegebenen Schnittstelle oder abstrakten Klasse:

```php
$manipulator->implementInterface(SomeInterface::class);
$manipulator->implement(SomeInterface::class);
// Ihre Klasse implementiert nun SomeInterface und enthält alle seine Methoden
```

Expand All @@ -892,6 +974,6 @@ echo $dumper->dump($var); // druckt ['a', 'b', 123]
Kompatibilitätstabelle .[#toc-compatibility-table]
--------------------------------------------------

PhpGenerator 4.0 und 4.1 sind kompatibel mit PHP 8.0 bis 8.3
PhpGenerator 4.1 ist kompatibel mit PHP 8.0 bis 8.4.

{{leftbar: nette:@menu-topics}}
Loading

0 comments on commit d280c3e

Please sign in to comment.