Longhorn PHP 2023 - Call for Papers

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

User Contributed Notes 3 notes

up
18
Andrzej
1 year 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

?>
up
20
sajjad.golchin
1 year 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
3
skelikem at gmail dot com
7 months ago
Add this method inside your enum to help you get a random value. Useful when writing tests.

enum MyEnum {

    // ....cases go here....

    public static function getRandom()
    {
        $enums = self::cases();

        return $enums[array_rand($enums)];
    }
}

   
$random = MyEnum::getRandom();

echo $random;
To Top