Nitelikler

Sayılamalar, sınıflardaki gibi davranan niteliklerden yararlanabilir. Ancak, bir sayılama içinde kullanılan niteliklerin özelliklerinin olmamasına dikkat edilmelidir; sadece yöntemler ve statik yöntemler içerebilir. Özellikleri olan bir nitelik ölümcül hata ile sonuçlanır.

<?php

interface Renkli
{
    public function renk(): string;
}
trait Dörtgen
{
    public function kesim(): string {
        return "Dörtgen";
    }
}
enum Deste implements Renkli
{
    use Dörtgen;
    case Kupalar;
    case Karolar;
    case Sinekler;
    case Maçalar;
    public function renk(): string
    {
        return match($this) {
            Deste::Kupalar, Deste::Karolar => 'Kırmızı',
            Deste::Sinekler, Deste::Maçalar => 'Siyah',
        };
    }
}
?>
add a note

User Contributed Notes 1 note

up
17
wervin at mail dot com
2 years ago
One good example of a trait, would be to give a lot of enums a method to retrieve their cases, values or both.

<?php
trait EnumToArray
{
    public static function names(): array
    {
        return array_column(self::cases(), 'name');
        
    }

    public static function values(): array
    {
        return array_column(self::cases(), 'value');
    }

    public static function asArray(): array
    {
        if (empty(self::values())) {
            return self::names();
        }
        
        if (empty(self::names())) {
            return self::values();
        }
        
        return array_column(self::cases(), 'value', 'name');
    }
}
?>

Some example outputs:

<?php
var_export(IpVersion::names());     // ['Ipv4', 'IPv6']
var_export(IpVersion::values());    // []
var_export(IpVersion::asArray());   // ['IPv4', 'IPv6']

var_export(Language::names());      // ['en', 'es']
var_export(Language::values());     // ['English', 'Spanish']
var_export(Language::asArray());    // ['en' => 'English', 'es' => 'Spanish']
To Top