Temel Numaralandırmalar

Numaralandırmalar 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 numaralandırma, 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 numaralı 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 numaralandırılmış türde değerlerin aktarılabileceği bir işlevin türü sadece o numaralandırılmış türe 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ç(): Değiştirge #1 ($deste) Deste türünde olmalıyken string türünde
kart_seç('Sinekler');
?>

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

Numaralandıma 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, numaralı 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).

Bir değer içermeyen case türüne "Desteksiz Kılıf" denir. Sadece desteksiz kılıflar içeren numaralandırmalara "Desteksiz Numaralandırma" denir.

Tüm desteksiz kılıflar içerildikleri numaralandırmayı 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"
?>
add a note

User Contributed Notes 2 notes

up
20
sajjad.golchin
7 months 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
*/
?>
up
9
Andrzej
2 months ago
Basic enumerations does not implement from() or tryFrom() methods, but it is possible to return the corresponding Enum Case from variable using the constant() function.

<?php

enum Limit
{
    case
Min;
    case
Max;
}

$value = 'Min';

$limit = constant("Limit::{$value}");

$limit === Limit::Min; // true

?>
To Top