PhpGenerator 3.4: přímo na tělo
PhpGenerator umí pomocí reflexe vytvořit model třídy nebo funkce podle
již existující. Snadno tak lze vytvářet například proxy třídy a
podobně. Nejnovější verze 3.4 jde ovšem ještě více na tělo.
Tedy přesněji řečeno, jde na těla metod a funkcí. Jejich vnitřní kód
totiž dokáže kopírovat taky. Model tak zachovává nejenom ducha, ale
i tělo 🙂
Nejprve si připomeňme způsob, jak lze vytvořit model třídy podle
existujícího vzoru:
use Nette\PhpGenerator\ClassType;
$class = ClassType::from(Nette\Application\UI\Control::class);
echo $class;
Vykreslená třída je pak poměrně přesnou kopií originální třídy,
včetně phpDoc komentářů atd. Od originálu se liší jen ve dvou
věcech:
- vynechává traity
- chybí těla funkcí
Vynechání trait je důsledkem nedostatečných možností reflexe tříd
v PHP, kdy je velmi komplikované zjistit, z jaké traity pochází properties
nebo metody. Nicméně podpora se možná v některé z příštích verzí
objeví.
Co však přinesla verze 3.4, tak je schopnost načítat třídy a funkce
včetně kódu v jejich těle. Udělá se to následovně:
$class = ClassType::withBodiesFrom(Nette\Application\UI\Control::class);
$function = Nette\PhpGenerator\GlobalFunction::withBodyFrom('dump');
Tato funkcionalita využívá knihovnu nikic/php-parser
, kterou
je potřeba doinstalovat:
composer require nikic/php-parser
Chcete-li odeslat komentář, přihlaste se