Latte: kako uporabljati sistem tipov?
Sistem tipov je glavna stvar pri razvoju robustnih aplikacij. Tipi v PHP imajo prednost pred drugimi dinamičnimi jeziki, kot so Python, Ruby ali JavaScript. Okvir Nette programerje že od samega začetka vodi k ustvarjanju tipizirane in stroge kode. Latte 2.7 je prinesel podporo za tipe tudi v predloge.
Vedeti, kateri podatkovni ali objektni tip je posamezna spremenljivka, omogoča
- IDE pravilno samodejno dopolnjevanje
- statično analizo za odkrivanje napak
Dve točki, ki bistveno izboljšata kakovost in udobje razvoja.
Kako deklarirati vrste na strani PHP?
Podatke bomo predlogi posredovali kot objekt razreda, ki definira vse spremenljivke in njihove tipe. Z uporabo novih funkcij PHP 7.4 bi bilo to lahko videti takole:
class MailTemplate
{
public string $lang = 'cs';
public Address $address;
public string $subject;
public ?float $price = null;
}
Uporaba:
$template = new MailTemplate;
$template->price = $this->getPrice();
...
$latte->render('mail.latte', $template);
Zaradi novih funkcij PHP 8 lahko primer zapišemo bolj zanimivo, kot je ta:
class MailTemplate
{
public function __construct(
public string $lang = 'cs',
public Address $address,
public string $subject,
public ?float $price = null,
) {}
}
$latte->render('mail.latte', new MailTemplate(
lang: $this->lang,
subject: $title,
price: $this->getPrice(),
address: $userAddress,
));
Kako deklarirati tipe v predlogi?
Ta razred lahko zdaj povežemo s predlogo. Navesti ga moramo le na začetku:
{templateType MailTemplate}
S tem smo določili, da bo predloga vsebovala četverico spremenljivk
$lang
, $address
, $subject
in
$price
, vključno z njihovimi vrstami.
Druga možnost je, da tipe vsake spremenljivke določimo neposredno
v predlogi, torej brez ustvarjanja razreda. V ta namen se uporablja oznaka
{varType}
:
{varType string $lang}
{varType Address $address}
Seveda je mogoče oboje kombinirati. Ustvarite razred, saj boste s tem
zagotovili dokončanje na strani predstavitve, ga povežite s predlogo
z uporabo {templateType}
in uporabite {varType}
za
druge lokalne spremenljivke v blokih itd. To lahko razumemo kot analogijo
/** @var type $variable */
, kar je komentar, ki ga včasih
uporabljamo v kodi PHP, da bi naročili IDE ali orodje za statično
analizo.
Prav tako lahko tip določimo v {var}
, {default}
ali {define}
:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Opomba: iz zgodovinskih razlogov je bilo mogoče spremenljivke v oznakah
{var}
in {default}
zapisati brez začetnega znaka
dolarja. Ker to ustvarja dvoumnost, ali gre za tip ali spremenljivko, je ta
sintaksa zastarela in Latte vas bo opozoril, če jo boste uporabili.
Kako poenostavite svoje delo?
Kako čim lažje napisati razred predloge ali {varType}
?
Pridobite jih generirane. Prav to stori par oznak {templatePrint}
in {varPrint}
.
Če v predlogo namestite eno od teh oznak, se namesto običajnega prikazovanja prikaže koda razreda ali predloge. Nato preprosto izberite in kopirajte kodo v svoj projekt.
Nette/aplikacija 3.1 (beta) vključuje preobremenjeno oznako
{templatePrint}
, ki generira kodo, ki je primernejša za
predstavnike.
Oznaka {varPrint}
navaja lokalne spremenljivke, ki niso
parametri predloge. Če želite našteti vse spremenljivke, uporabite
{varPrint all}
.
Dopolnjevanje kode IDE
Najnovejša različica vtičnika PhpStorm Latte lahko izkoristi zgornje
oznake in nato predlaga na podlagi vrst. Vtičnik pozna tudi vrste standardnih
spremenljivk, kot so $user
, $presenter
,
$basePath
itd.
Statična analiza
Končni cilj je, da se lahko vse prijavljene vrste uporabljajo tudi za statično analizo. Na primer, da se PHPStan uporabi za preverjanje predlog enako preprosto kot drugih datotek PHP.
Na tem delamo in to boste videli v eni od naslednjih različic programa Latte.
Če želite oddati komentar, se prijavite