mirror of
https://github.com/php/doc-tr.git
synced 2026-04-29 09:53:19 +02:00
327 lines
7.6 KiB
XML
327 lines
7.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 6c71b05df89358d7760a4740ed3fcfa1682eadb6 Maintainer: nilgun Status: ready -->
|
||
<sect1 xml:id="control-structures.match" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>match</title>
|
||
<?phpdoc print-version-for="match"?>
|
||
<para>
|
||
<literal>match</literal> (eşleşme) ifadesi, bir değerin özdeşlik denetimine
|
||
dayalı olarak değerlendirmesini dallara ayırır. Switch deyimine benzer
|
||
şekilde, bir <literal>match</literal> ifadesinin birden çok alternatifle
|
||
karşılaştırılan bir özne ifadesi vardır. <literal>switch</literal>'in
|
||
aksine, üçlü ifadeler gibi bir değere indirgeyecektir.
|
||
<literal>switch</literal> 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.
|
||
</para>
|
||
|
||
<example>
|
||
<title><literal>match</literal> ifadesinin yapısı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$dönüş değeri = match (özne_ifade) {
|
||
tekil_koşullu_ifade => dönüş_ifadesi,
|
||
koşullu_ifade1, koşullu_ifade2 => dönüş_ifadesi,
|
||
};
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<example>
|
||
<title><literal>match</literal> temel kullanım örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
string(13) "Bu bir börek"
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
<example>
|
||
<title>Karşılaştırma işleçleriyle <literal>match</literal> kullanımı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$age = 18;
|
||
|
||
$output = match (true) {
|
||
$age < 2 => "Bebek",
|
||
$age < 13 => "Çocuk",
|
||
$age <= 19 => "Genç",
|
||
$age > 19 => "Yetişkin",
|
||
$age >= 65 => "Yaşlı"
|
||
};
|
||
|
||
var_dump($output);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
string(8) "Genç"
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
<note>
|
||
<simpara>
|
||
<literal>match</literal> ifadesinin sonucunun kullanılmasına gerek yoktur.
|
||
</simpara>
|
||
</note>
|
||
<note>
|
||
<simpara>
|
||
<literal>match</literal> ifadesi <emphasis>mutlaka</emphasis> bir noktalı
|
||
virgül <literal>;</literal> ile sonlandırılmalıdır.
|
||
</simpara>
|
||
</note>
|
||
</example>
|
||
|
||
<para>
|
||
<literal>match</literal> ifadesi <literal>switch</literal> deyimine
|
||
benzemekle birlikte bazı önemli farklar vardır:
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Bir <literal>match</literal> kolu, değeri birebir (<code>===</code>)
|
||
değerlendirir, <literal>switch</literal> deyimin yaptığı gibi gevşekçe
|
||
değil.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<literal>match</literal> ifadesi bir değer döndürür.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<literal>match</literal> kolları <literal>switch</literal> deyimlerini
|
||
yaptığı gibi sonraki durumlarda başarısız olmaz.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<literal>match</literal> ifadesi kapsamlı olmalıdır.
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
|
||
<para>
|
||
<literal>switch</literal> deyimleri gibi, <literal>match</literal> 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:
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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.
|
||
};
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
|
||
<para>
|
||
<literal>match</literal> 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.
|
||
</para>
|
||
<para>
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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,
|
||
};
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<para>
|
||
Özel bir durum <literal>default</literal> kalıbıdır.
|
||
Bu kalıp evvelce eşleşmemiş herşeyle eşleşir.
|
||
Örnek:
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$ifadeSonucu = match ($koşul) {
|
||
1, 2 => foo(),
|
||
3, 4 => bar(),
|
||
default => baz(),
|
||
};
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
<note>
|
||
<simpara>
|
||
Çok sayıda <literal>default</literal> kalıbı bir
|
||
<constant>E_FATAL_ERROR</constant> hatasına (ölümcül hataya) yol açar.
|
||
</simpara>
|
||
</note>
|
||
</para>
|
||
|
||
<para>
|
||
<literal>match</literal> ifadesi kapsamlı olmalıdır. Konu ifadesi herhangi
|
||
bir eşleşme kolu tarafından işlenmezse, bir
|
||
<classname>UnhandledMatchError</classname> (başarısız eşleşme hatası)
|
||
yavrulanır.
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Başarısız eşleşme hatası örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$özne = 5;
|
||
|
||
try {
|
||
match ($özne) {
|
||
1, 2 => foo(),
|
||
3, 4 => bar(),
|
||
};
|
||
} catch (\UnhandledMatchError $e) {
|
||
var_dump($e);
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
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
|
||
}
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<sect2>
|
||
<title>- Başarısız eşleşmeleri işlemek için <literal>match</literal>
|
||
ifadelerin kullanımı</title>
|
||
<para>
|
||
Özne ifadesi olarak true kullanarak özdeş olmayan koşullu durumları ele almak
|
||
için bir <literal>match</literal> ifadesi kullanmak mümkündür.
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Tamsayı aralıklarında dallanmak için genelleştirilmiş eşleşme
|
||
ifadelerinin kullanılması</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$yaş = 23;
|
||
|
||
$result = match (true) {
|
||
$yaş >= 65 => 'yaşlı',
|
||
$yaş >= 25 => 'yetişkin',
|
||
$yaş >= 18 => 'genç',
|
||
default => 'çocuk',
|
||
};
|
||
|
||
var_dump($result);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
string(11) "genç"
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Dize içeriklerde dallanmak için genelleştirilmiş eşleşme
|
||
ifadelerinin kullanılması</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
string(2) "fr"
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|