1
0
mirror of https://github.com/php/doc-tr.git synced 2026-04-29 09:53:19 +02:00
Files
2024-08-30 17:44:01 +03:00

327 lines
7.6 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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
-->