Temel Sayılamalar

Sayılamalar sınıflara benzer ve sınıflar, arayüzler ve niteliklerle aynı isim alanını paylaşır. Ayrıca, aynı yolla otomatik yüklenebilir. Her sayılama, sınırlı ve sabit sayıda olası değer içeren yeni bir tür tanımlar.

<?php
enum Deste
{
case
Kupalar;
case
Karolar;
case
Sinekler;
case
Maçalar;
}
?>

Bu bildirim Deste adında yalnız ve yalnız dört meşru değer içeren yeni bir sayılama türü oluşturur: Deste::Kupalar, Deste::Karolar, Deste::Sinekler ve Deste::Maçalar. Değişkenlere bu dört değerden biri atanabilir. Yalnızca sayılama türünde değerlerin aktarılabileceği bir işlevin türü sadece o sayılama türüne karşı tür denetimine tabi tutulabilir.

<?php
function kart_seç(Deste $deste)
{
/* ... */
}

$val = Deste::Karolar;

// OK
kart_seç($val);

// OK
kart_seç(Deste::Sinekler);

// Tür hatası: kart_seç(): Bağımsız değişken #1 ($deste) Deste türünde olmalıyken string türünde
kart_seç('Sinekler');
?>

Bir sayılama sıfır veya daha fazla sayıda case tanımı içerebilir ve azami bir sınır yoktur. case içermeyen sayılamalar sözdizimsel olarak geçerli olsa da yararsızdır.

Sayılama kılıflarında PHP'nın yaftalara uyguladığı sözdizimi kuralları uygulanır, daha fazla bilgi Sabitler bölümünde bulunabilir.

Öntanımlı olarak, bir case özünde bir sayıl değerle desteklenmez. Yani, Deste::Kupalar sayıl olarak "0" değerine eşit değildir. Bunun yerine, her case taşıdığı isimde tekil bir nesneyle desteklenir. Şöyle ki:

<?php
$a
= Deste::Sinekler;
$b = Deste::Sinekler;
$a === $b; // true
$a instanceof Deste; // true
?>

Bu ayrıca, sayılama değerlerin birbirlerinden büyük veya küçük olamayacağı anlamına da gelir (zaten nesneler arasında böyle bir karşılaştıma anlamsızdır). Sayılama değerleri ile çalışırken bu karşılaştırmalar daima false döndürür.

Bir değer içermeyen case türüne "Desteksiz Kılıf" denir. Sadece desteksiz kılıflar içeren sayılamalara "Desteksiz Sayılama" denir.

Tüm desteksiz kılıflar içerildikleri sayılamayı gerçekleyen örneklerdir. enum türü dahili olarak bir sınıfla ifade edilir.

Tüm kılıflar birer salt-okunur özellik olup name harf büyüklüğüne duyarsız olarak kılıfın kendi ismidir.

<?php
print Deste::Sinekler->name;
// çıktısı: "Sinekler"
?>

name dinamik olarak elde edilmişse, bir enum durumunun varlığına bakmak veya okumak için defined() ve constant() işlevlerini kullanmak da mümkündür. Bununla birlikte, Destekli sayılamaların kullanımı çoğu kullanım durumunda çalışması gerektiğinden bu önerilmez.

add a note add a note

User Contributed Notes 1 note

up
8
sajjad.golchin
2 years ago
<?php

enum Colors
{
    case
Red;
    case
Blue;
    case
Green;

    public function
getColor(): string
   
{
        return
$this->name;
    }
}

function
paintColor(Colors $colors): void
{
    echo
"Paint : " . $colors->getColor() . PHP_EOL;
}

paintColor(Colors::Red);
paintColor(Colors::Green);
paintColor(Colors::Blue);

/*
    output :
    ------------------------
    Paint : Red
    Paint : Green
    Paint : Blue
*/
?>
To Top