Nakon ovog poglavlja
Što ćete znati napraviti
- Modelirati zatvoren skup stanja enumom.
- Koristiti readonly za vrijednosti koje se nakon stvaranja ne mijenjaju.
- Objasniti da atribut sam po sebi ne izvršava ponašanje.
Nakon stvaranja bez promjene
Readonly objekt kao siguran prijenos podataka
Readonly svojstvo može se inicijalizirati jednom u dopuštenom dosegu. Readonly klasa sva instancijska svojstva čini tipiziranima i readonly. To je prikladno za DTO i vrijednosne objekte, ali ne čini objekte na koje svojstvo pokazuje duboko nepromjenjivima.
<?php
readonly class RegisterUserData
{
public function __construct(
public string $email,
public string $displayName,
) {}
}
Zatvoren skup
Enum umjesto proizvoljnog stringa
Ako status smije imati samo nekoliko vrijednosti, string dopušta tipfelere i nepoznata stanja. Backed enum svakom slučaju pridružuje string ili int te se lako sprema u bazu. Metode na enumu mogu sadržavati ponašanje povezano sa stanjem.
<?php
enum ArticleStatus: string
{
case Draft = 'draft';
case Review = 'review';
case Published = 'published';
public function label(): string
{
return match ($this) {
self::Draft => 'Skica',
self::Review => 'Na provjeri',
self::Published => 'Objavljeno',
};
}
}
Strojno čitljivi metapodaci
Atribut opisuje, drugi kod reagira
Atribut je strukturirani metapodatak pričvršćen na klasu, metodu, svojstvo ili parametar. Framework ili naš kod čita ga refleksijom i primjenjuje ponašanje. Sama oznaka #[...] ništa ne validira niti usmjerava.
<?php
#[Attribute(Attribute::TARGET_PROPERTY)]
final class Sensitive
{
}
final class Credentials
{
#[Sensitive]
public string $password;
}
Primijenite naučeno
Vježba: Status zadatka
Zamijenite string status enumom i dodajte dopuštene prijelaze.
- Definirajte Todo, Doing i Done slučajeve.
- Dodajte hrvatsku oznaku za prikaz.
- Napišite metodu koja govori je li status završen.
Za provjeru i nastavak