Latte: cum se utilizează sistemul de tipuri?
Sistemul de tipuri este principalul element pentru dezvoltarea de aplicații robuste. Tipurile din PHP au o superioritate față de alte limbaje dinamice, cum ar fi Python, Ruby sau JavaScript. Nette Framework îi determină pe programatori să producă cod tipizat și strict de la început. Latte 2.7 a adus suportul pentru tipuri și în cazul șabloanelor.
A ști ce tip de date sau de obiect este fiecare variabilă permite
- IDE să completeze automat în mod corect
- analiza statică pentru a detecta erorile
Două puncte care îmbunătățesc semnificativ calitatea și confortul dezvoltării.
Cum se declară tipurile în partea PHP?
Vom trece datele în șablon ca un obiect al unei clase care definește toate variabilele și tipurile acestora. Utilizând noile caracteristici ale PHP 7.4, ar putea arăta astfel:
class MailTemplate
{
public string $lang = 'cs';
public Address $address;
public string $subject;
public ?float $price = null;
}
Utilizare:
$template = new MailTemplate;
$template->price = $this->getPrice();
...
$latte->render('mail.latte', $template);
Adăugare: datorită noilor caracteristici ale PHP 8, exemplul poate fi scris mai interesant, astfel:
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,
));
Cum se declară tipurile într-un șablon?
Acum putem asocia clasa respectivă cu șablonul. Trebuie doar să o declarăm la început:
{templateType MailTemplate}
Astfel, am definit că șablonul va conține un cvartet de variabile
$lang
, $address
, $subject
și
$price
, inclusiv tipurile lor respective.
Alternativa este de a defini tipurile fiecărei variabile direct în șablon,
adică fără a crea o clasă. În acest scop, se utilizează eticheta
{varType}
:
{varType string $lang}
{varType Address $address}
Bineînțeles, ambele pot fi combinate. Creați o clasă, deoarece acest
lucru va asigura finalizarea pe partea prezentatorului, legați-o de șablon
utilizând {templateType}
și utilizați {varType}
pentru alte variabile locale din blocuri etc. Acest lucru poate fi înțeles ca
o analogie /** @var type $variable */
, care este un comentariu pe
care îl folosim uneori în codul PHP pentru a instrui IDE sau instrumentul de
analiză statică.
De asemenea, tipul poate fi specificat în {var}
,
{default}
sau {define}
:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Notă: din motive istorice, a fost posibilă scrierea variabilelor în
etichetele {var}
și {default}
fără semnul dolarului
din față. Deoarece acest lucru creează ambiguitate dacă este vorba de un tip
sau de o variabilă, această sintaxă este depreciată, iar Latte vă va
avertiza atunci când o utilizați.
Cum vă simplificați munca?
Cum să scrieți o clasă șablon sau {varType}
cât mai ușor
posibil? Faceți-le să fie generate. Tocmai asta fac perechea de etichete
{templatePrint}
și {varPrint}
.
Dacă plasați una dintre aceste etichete într-un șablon, codul clasei sau al șablonului este afișat în loc de redarea normală. Apoi, este suficient să selectați și să copiați codul în proiectul dumneavoastră.
Nette/application 3.1 (beta) include o etichetă supraîncărcată
{templatePrint}
care generează un cod mai potrivit pentru
prezentatori.
Eticheta {varPrint}
enumeră variabilele locale care nu sunt
parametri de șablon. Dacă doriți să listați toate variabilele, utilizați
{varPrint all}
.
Completarea codului IDE
Cea mai recentă versiune a plugin-ului PhpStorm Latte poate profita de
etichetele de mai sus și apoi poate sugera pe baza tipurilor. Plugin-ul
cunoaște, de asemenea, tipurile de variabile standard, cum ar fi
$user
, $presenter
, $basePath
, etc.
Analiza statică
Scopul final este ca toate tipurile declarate să poată fi utilizate și pentru analiza statică. De exemplu, pentru a utiliza PHPStan pentru a verifica șabloanele la fel de ușor ca și alte fișiere PHP.
Lucrăm la acest lucru și îl veți vedea într-una dintre următoarele versiuni ale Latte.
Pentru a trimite un comentariu, vă rugăm să vă conectați