Prečo by ste mali v PHP používať PHP Enums namiesto reťazcov
4 min čítania
V PHP je bežné používať reťazce na reprezentáciu dát, ale má to aj svoje nevýhody. Preklepy, chýbajúci kontext a problémy s údržbou môžu sťažovať prácu s reťazcami, najmä ak váš kód rastie. Našťastie PHP 8.1 zaviedlo Enums, funkciu, ktorá môže pomôcť vyriešiť tieto problémy. Pozrime sa, prečo prechod z reťazcov na Enums môže vylepšiť váš kód a uľahčiť prácu s ním.
Prečo to používať
V nasledujúcich riadkoch nájdete šesť dôvodov, prečo môže použitie PHP Enums namiesto reťazcov prospieť vášmu kódu a uľahčiť vývoj.
1. Väčšia bezpečnosť typov
Pri používaní reťazcov je ľahké urobiť chyby, napríklad preklep v slove. Predpokladajme, že spracovávate stavy objednávok:
$orderStatus = ‚pendinng‘; // Ups, preklep!
S Enums PHP neumožní tento druh chyby, pretože každý Enum má preddefinované hodnoty. Takto to funguje s Enum:
enum OrderStatus: string {
case PENDING = ‚pending‘;
case PROCESSING = ‚processing‘;
case COMPLETED = ‚completed‘;
case CANCELED = ‚canceled‘;
}
$orderStatus = OrderStatus::PENDING;
Ak sa pokúsite použiť nesprávnu hodnotu, PHP vyhodí chybu a zachytí preklepy a iné chyby skôr, ako spôsobia problémy vo vašom kóde.
2. Prehľadnejší kód
Reťazce neposkytujú veľa kontextu, takže často nie je jasné, aké hodnoty sú povolené. Na druhej strane, enumy jasne ukazujú, ktoré hodnoty môžete použiť. Tu je príklad:
// Použitie reťazca
function updateOrderStatus(string $status) { /* ... */ }
// Použitie enumu
function updateOrderStatus(OrderStatus $status) { /* ... */ }
V prípade verzie Enum je jasné, že OrderStatus má špecifické hodnoty, čo uľahčuje pochopenie kódu. To pomáha vám aj ostatným, ktorí môžu neskôr pracovať na kóde.
3. Lepšia podpora zo strany vášho IDE
Väčšina moderných IDE (ako VS Code alebo PHPStorm) ponúka lepšiu podporu pre Enums. Napríklad, keď začnete písať OrderStatus::, vaše IDE vám môže zobraziť zoznam všetkých možných hodnôt pre tento Enum.
Enums tiež uľahčujú refaktoring. Ak potrebujete zmeniť hodnotu stavu, stačí ju aktualizovať v definícii Enum a celý kód automaticky použije novú hodnotu. V prípade reťazcov by ste museli vyhľadať a nahradiť každú inštanciu, čo je náchylnejšie na chyby.
4. Vyhnutie sa „magickým reťazcom“
„Magické reťazce“ sú reťazce, ktoré majú vo vašom kóde špeciálny význam, často bez akejkoľvek dokumentácie. Sú rizikové, pretože sú roztrúsené po celom kóde a môžu byť ľahko zneužívané. S Enums môžete tieto hodnoty centralizovať, čím sa kód stane zmysluplnejším a konzistentnejším. Napríklad:
// S magickými reťazcami
if ($orderStatus === ‚completed‘) {
// Urobiť niečo
}
// S Enums
if ($orderStatus === OrderStatus::COMPLETED) {
// Urobiť niečo
}
Enums jasne ukazujú, že COMPLETED nie je len akýkoľvek reťazec, ale špecifický stav v OrderStatus.
5. Zjednodušenie overovania údajov
S Enums sa nemusíte obávať, že sa budú prenášať náhodné alebo nesprávne hodnoty. Keďže každý Enum má sadu povolených hodnôt, PHP ich môže automaticky overovať za vás.
Napríklad, ak posielate stav objednávky do API, Enums zabezpečia, že sa odošlú len platné stavy:
function sendOrderStatus(OrderStatus $status) {
// Automaticky obmedzené na preddefinované stavy
}
Vďaka tomu je váš kód bezpečnejší a znižuje sa potreba dodatočných kontrol chýb.
6. Pridávanie metód do enumov
PHP enumy môžu obsahovať aj metódy, vďaka čomu môžete pridať súvisiace funkcie priamo do enumu. Napríklad, ak máte Enum pre používateľské role, môžete pridať metódu na kontrolu, či používateľ môže niečo upravovať:
enum OrderStatus: string {
case PENDING = ‚pending‘;
case PROCESSING = ‚processing‘;
case COMPLETED = ‚completed‘;
case CANCELED = ‚canceled‘;
public function getTranslation(): string {
return match($this) {
self::PENDING => __(‚orders.status.pending‘),
self::PROCESSING => __(‚orders.status.processing‘),
self::COMPLETED => __(‚orders.status.completed‘),
self::CANCELED => __(‚orders.status.canceled‘)
};
}
}
$orderStatus = OrderStatus::COMPLETED;
<div>
{{ $orderStatus->getTranslation() }}
</div
Týmto spôsobom zostáva súvisiaca logika na jednom mieste, čo uľahčuje čitateľnosť a správu kódu.
Kedy by ste mali používať enumy?
Enumy sú najvhodnejšie v prípadoch, keď máte stanovený počet možností, ako napríklad stavy, roly používateľov alebo kategórie. Nie sú ideálne pre veci, ktoré sa často menia alebo pochádzajú zo vstupov používateľov, ako napríklad polia formulárov alebo nastavenia z databázy.
Záver
Prechod z reťazcov na PHP Enums môže zvýšiť spoľahlivosť, čitateľnosť a ľahšiu údržbu vášho kódu. Enums zabraňujú preklepom, znižujú počet chýb a uľahčujú pochopenie kódu. Ak pracujete s PHP 8.1 alebo novším, zvážte vyskúšanie Enums – možno zistíte, že vylepšia váš kód spôsobmi, ktoré ste nečakali.