Sayılama Yöntemleri
  
   Sayılamalar (destekli ve desteksiz, her ikiside) yöntemler içerebilir
   ve arayüzleri gerçekleyebilir. Bir sayılama, bir arayüzü
   gerçekliyorsa bu arayüz için her tür sınaması bu sayılamanın tüm
   sınıflarını kabul edecektir.
  
  
<?php
interface Renkli
{
    public function renk(): string;
}
enum Deste implements Renkli
{
    case Kupalar;
    case Karolar;
    case Sinekler;
    case Maçalar;
    // Arayüzle anlaşmayı sağlar.
    public function renk(): string
    {
        return match($this) {
            Deste::Kupalar, Deste::Karolar => 'Kırmızı',
            Deste::Sinekler, Deste::Maçalar => 'Siyah',
        };
    }
    // bir arayüzün parçası değil; ama geçerli.
    public function kesim(): string
    {
        return "Dörtgen";
    }
}
function boya(Renkli $c)
{
   /* ... */
}
boya(Deste::Sinekler);  // çalışır
print Deste::Karolar->kesim(); //  "Dörtgen"
?>
   
  
   Bu örnekte, dört Deste örneğinin hepsi iki yönteme
   sahiptir: renk() ve kesim(). Kod
   çağrılır çağrılmaz tür sınamaları yapılır. Bu, diğer nesne örneklerine
   uygulanandan farklı değildir.
  
  
   Destekli sayılamada arayüz bildirimi, desteki tür bildiriminden sonra
   ele alınır.
  
  
   <?php
interface Renkli
{
    public function renk(): string;
}
enum Deste: string implements Renkli
{
    case Kupalar = 'Ku';
    case Karolar = 'Ka';
    case Sinekler = 'S';
    case Maçalar = 'M';
    // arayüzle anlaşmayı sağlar
    public function renk(): string
    {
        return match($this) {
            Deste::Kupalar, Deste::Karolar => 'Kırmızı',
            Deste::Sinekler, Deste::Maçalar => 'Siyah',
        };
    }
}
?>
   
  
   Yöntemin içindeki $this değişkeni değer olarak kılıf
   örneği alır.
  
  
   Yöntemler keyfi olarak karmaşık olabilir, ancak uygulamada, farklı
   durumlara farklı sonuçlar sağlamak için genellikle statik bir değer döner
   veya $this ile match ifadesine eşlenir.
  
  
   Bu durumda, Kırmızı ve Siyah değerleriyle bir RenkliDeste Enum türü
   tanımlamak ve bunun yerine onu döndürmek daha iyi bir veri modelleme
   uygulaması olacaktır. Ancak bu, örneği daha da karmaşıklaştıracaktır.
  
  
   Yukarıdaki hiyerarşi mantıksal olarak aşağıdaki sınıf yapısına benzer
   (bu, çalışan asıl kod olmasa da):
  
  
<?php
interface Renkli
{
    public function renk(): string;
}
final class Deste implements UnitEnum, Renkli
{
    public const Kupalar = new self('Kupalar');
    public const Karolar = new self('Karolar');
    public const Sinekler = new self('Sinekler');
    public const Maçalar = new self('Maçalar');
    private function __construct(public readonly string $name) {}
    public function renk(): string
    {
        return match($this) {
            Deste::Kupalar, Deste::Karolar => 'Kırmızı',
            Deste::Sinekler, Deste::Maçalar => 'Siyah',
        };
    }
    public function kesim(): string
    {
        return "Dörtgen";
    }
    public static function cases(): array
    {
        // Geçersiz yöntem
        // Bir Enum üzerinde cases() yöntemini geliştirici tanımlayamaz.
        // "Değer listeleme" bölümüne bakınız.
    }
}
?>
   
  
   Yöntemler public, private veya protected olabilir, ancak uygulamada
   private ve protected kalıtıma izin verilmediğinden eşdeğerdir.