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