<?> PHP NOVA invictum.hr
Izdanje 2026.
Poglavlje 18

Moderni objekti

Primjenjujemo readonly svojstva, enume, atribute i druge mogućnosti modernog PHP-a ondje gdje doista povećavaju jasnoću.

24 min čitanja Srednje razina PHP 8.5 ciljna verzija

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.

Readonly DTO
<?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.

Backed enum
<?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.

Korisnički atribut
<?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.

  1. Definirajte Todo, Doing i Done slučajeve.
  2. Dodajte hrvatsku oznaku za prikaz.
  3. Napišite metodu koja govori je li status završen.

Za provjeru i nastavak

Službeni izvori