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.