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.