PHP 8.2.0 Beta 3 available for testing

Numaralandırma Yöntemleri

Numaralandırmalar (destekli ve desteksiz, her ikiside) yöntemler içerebilir ve arayüzleri gerçekleyebilir. Bir numaralandırma, bir arayüzü gerçekliyorsa bu arayüz için her tür sınaması bu numaralandırmanın tüm sınıflarını kabul edecektir.

<?php
interface Renkli
{
    public function 
renk(): string;
}
enum Deste implements Renkli
{
    case 
Kupalar;
    case 
Karolar;
    case 
Sinekler;
    case 
Maçalar;
    
// Arayüzle anlaşmayı sağlar.
    
public function renk(): string
    
{
        return 
match($this) {
            
Deste::KupalarDeste::Karolar => 'Kırmızı',
            
Deste::SineklerDeste::Maçalar => 'Siyah',
        };
    }
    
// bir arayüzün parçası değil; ama geçerli.
    
public function kesim(): string
    
{
        return 
"Dörtgen";
    }
}
function 
boya(Renkli $c) { ... }
boya(Deste::Sinekler);  // çalışır
print Deste::Karolar->kesim(); //  "Dörtgen"
?>

Bu örnekte, dört Deste örneğinin hepsi iki yönteme sahiptir: renk() ve kesim(). Kod çağrılır çağrılmaz tür sınamaları yapılır. Bu, diğer nesne örneklerine uygulanandan farklı değildir.

Destekli numaralamada arayüz bildirimi, desteki tür bildiriminden sonra ele alınır.

<?php
interface Renkli
{
    public function 
renk(): string;
}
enum Destestring implements Renkli
{
    case 
Kupalar 'Ku';
    case 
Karolar 'Ka';
    case 
Sinekler 'S';
    case 
Maçalar 'M';
    
// arayüzle anlaşmayı sağlar
    
public function renk(): string
    
{
        return 
match($this) {
            
Deste::KupalarDeste::Karolar => 'Kırmızı',
            
Deste::SineklerDeste::Maçalar => 'Siyah',
        };
    }
}
?>

Yöntemin içindeki $this değişkeni değer olarak kılıf örneği alır.

Yöntemler keyfi olarak karmaşık olabilir, ancak uygulamada, farklı durumlara farklı sonuçlar sağlamak için genellikle statik bir değer döner veya $this ile eşleşir.

Bu durumda, Kırmızı ve Siyah değerleriyle bir RenkliDeste Enum türü tanımlamak ve bunun yerine onu döndürmek daha iyi bir veri modelleme uygulaması olacaktır. Ancak bu, örneği daha da karmaşıklaştıracaktır.

Yukarıdaki hiyerarşi mantıksal olarak aşağıdaki sınıf yapısına benzer (bu, çalışan asıl kod olmasa da):

<?php
interface Renkli
{
    public function 
renk(): string;
}
final class 
Deste implements UnitEnumRenkli
{
    public const 
Kupalar = new self('Kupalar');
    public const 
Karolar = new self('Karolar');
    public const 
Sinekler = new self('Sinekler');
    public const 
Maçalar = new self('Maçalar');
    private function 
__construct(public readonly string $name) {}
    public function 
renk(): string
    
{
        return 
match($this) {
            
Deste::KupalarDeste::Karolar => 'Kırmızı',
            
Deste::SineklerDeste::Maçalar => 'Siyah',
        };
    }
    public function 
kesim(): string
    
{
        return 
"Dörtgen";
    }
    public static function 
cases(): array
    {
        
// Geçersiz yöntem
        // Bir Enum üzerinde cases() yöntemini geliştirici tanımlayamaz.
        // "Değer listeleme" bölümüne bakınız.
    
}
}
?>

Yöntemler public, private veya protected olabilir, ancak uygulamada private ve protected kalıtıma izin verilmediğinden eşdeğerdir.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top