array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'control-structures.match.php', 1 => 'match', ), 'up' => array ( 0 => 'language.control-structures.php', 1 => 'Denetim Yapıları', ), 'prev' => array ( 0 => 'control-structures.switch.php', 1 => 'switch', ), 'next' => array ( 0 => 'control-structures.declare.php', 1 => 'declare', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'language/control-structures/match.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 8)
match
(eşleşme) ifadesi, bir değerin özdeşlik denetimine
dayalı olarak değerlendirmesini dallara ayırır. Switch deyimine benzer
şekilde, bir match
ifadesinin birden çok alternatifle
karşılaştırılan bir özne ifadesi vardır. switch
'in
aksine, üçlü ifadeler gibi bir değere indirgeyecektir.
switch
aksine, karşılaştırma zayıf bir eşitlik
denetiminden (==) ziyade bir özdeşlik denetimidir (===). Eşleşme ifadeleri
PHP 8.0.0'dan itibaren mevcuttur.
Örnek 1 match
ifadesinin yapısı
<?php
$dönüş değeri = match (özne_ifade) {
tekil_koşullu_ifade => dönüş_ifadesi,
koşullu_ifade1, koşullu_ifade2 => dönüş_ifadesi,
};
?>
Örnek 2 match
temel kullanım örneği
<?php
$yiyecek = 'börek';
$dönen_değer = match ($yiyecek) {
'meyva' => 'Bu bir meyva',
'çorba' => 'Bu bir çorba',
'börek' => 'Bu bir börek',
};
var_dump($dönen_değer);
?>
Yukarıdaki örneğin çıktısı:
string(13) "Bu bir börek"
Bilginize:
match
ifadesinin sonucunun kullanılmasına gerek yoktur.
Bilginize:
match
ifadesi mutlaka bir noktalı virgül;
ile sonlandırılmalıdır.
match
ifadesi switch
deyimine
benzemekle birlikte bazı önemli farklar vardır:
match
kolu, değeri birebir (===
)
değerlendirir, switch
deyimin yaptığı gibi gevşekçe
değil.
match
ifadesi bir değer döndürür.
match
kolları switch
deyimlerini
yaptığı gibi sonraki durumlarda başarısız olmaz.
match
ifadesi kapsamlı olmalıdır.
switch
deyimleri gibi, match
ifadeleri
de eşleşmeleri sırayla değerlendirir. Başlangıçta hiçbir kod çalıştırılmaz.
Koşullu ifadeler yalnızca, tüm önceki koşullu ifadeler özne ifadeyle
eşleşmede başarısız olmuşlarsa değerlendirilir. Yalnızca eşleşen koşullu
ifadeye karşılık gelen dönüş ifadesi değerlendirilir. Örneğin:
<?php
$sonuç = match ($x) {
foo() => ...,
$this->bar() => ..., // foo() === $x ise $this->bar çağrılmaz
$this->baz => beep(), // $x === $this->baz olmadıkça beep() çağrılmaz
// vb.
};
?>
match
ifadesinin kolları virgüllerle ayrılmış çok sayıda
ifade içerebilir. Bu bir mantıksal VEYA olup, aynı sağ taraflı çok sayıda
eşleşme kolu için bir kısa yoldur.
<?php
$sonuç = match ($x) {
// Bu eşleşme kolu:
$a, $b, $c => 5,
// Aşağıdaki üç eşleşme koluna eşdeğerdir:
$a => 5,
$b => 5,
$c => 5,
};
?>
Özel bir durum default
kalıbıdır.
Bu kalıp evvelce eşleşmemiş herşeyle eşleşir.
Örnek:
<?php
$ifadeSonucu = match ($koşul) {
1, 2 => foo(),
3, 4 => bar(),
default => baz(),
};
?>
Bilginize: Çok sayıda
default
kalıbı birE_FATAL_ERROR
hatasına (ölümcül hataya) yol açar.
match
ifadesi kapsamlı olmalıdır. Konu ifadesi herhangi
bir eşleşme kolu tarafından işlenmezse, bir
UnhandledMatchError (başarısız eşleşme hatası)
yavrulanır.
Örnek 3 - Başarısız eşleşme hatası örneği
<?php
$özne = 5;
try {
match ($özne) {
1, 2 => foo(),
3, 4 => bar(),
};
} catch (\UnhandledMatchError $e) {
var_dump($e);
}
?>
Yukarıdaki örneğin çıktısı:
object(UnhandledMatchError)#1 (7) { ["message":protected]=> string(33) "Unhandled match value of type int" ["string":"Error":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(9) "/in/ICgGK" ["line":protected]=> int(6) ["trace":"Error":private]=> array(0) { } ["previous":"Error":private]=> NULL }
match
ifadelerin kullanımı
Özne ifadesi olarak true kullanarak özdeş olmayan koşullu durumları ele almak
için bir match
ifadesi kullanmak mümkündür.
Örnek 4 - Tamsayı aralıklarında dallanmak için genelleştirilmiş eşleşme ifadelerinin kullanılması
<?php
$yaş = 23;
$result = match (true) {
$yaş >= 65 => 'yaşlı',
$yaş >= 25 => 'yetişkin',
$yaş >= 18 => 'genç',
default => 'çocuk',
};
var_dump($result);
?>
Yukarıdaki örneğin çıktısı:
string(11) "genç"
Örnek 5 - Dize içeriklerde dallanmak için genelleştirilmiş eşleşme ifadelerinin kullanılması
<?php
$text = 'Bienvenue chez nous';
$result = match (true) {
str_contains($text, 'Welcome') || str_contains($text, 'Hello') => 'en',
str_contains($text, 'Bienvenue') || str_contains($text, 'Bonjour') => 'fr',
// ...
};
var_dump($result);
?>
Yukarıdaki örneğin çıktısı:
string(2) "fr"