<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.control-structures.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'control-structures.match.php',
    1 => 'match',
    2 => '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',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="control-structures.match" class="sect1">
 <h2 class="title">match</h2>
 <p class="verinfo">(PHP 8)</p>
 <p class="para">
  <code class="literal">match</code> (eşleşme) ifadesi, bir değerin özdeşlik denetimine
  dayalı olarak değerlendirmesini dallara ayırır. Switch deyimine benzer
  şekilde, bir <code class="literal">match</code> ifadesinin birden çok alternatifle
  karşılaştırılan bir özne ifadesi vardır. <code class="literal">switch</code>&#039;in
  aksine, üçlü ifadeler gibi bir değere indirgeyecektir.
  <code class="literal">switch</code> aksine, karşılaştırma zayıf bir eşitlik
  denetiminden (==) ziyade bir özdeşlik denetimidir (===). Eşleşme ifadeleri
  PHP 8.0.0&#039;dan itibaren mevcuttur.
 </p>

 <div class="example" id="example-1">
  <p><strong>Örnek 1 <code class="literal">match</code> ifadesinin yapısı</strong></p>
  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$dönüş değeri </span><span style="color: #007700">= match (</span><span style="color: #0000BB">özne_ifade</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">tekil_koşullu_ifade </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">dönüş_ifadesi</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">koşullu_ifade1</span><span style="color: #007700">, </span><span style="color: #0000BB">koşullu_ifade2 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">dönüş_ifadesi</span><span style="color: #007700">,<br />};<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

   <div class="example" id="example-2">
   <p><strong>Örnek 2 <code class="literal">match</code> temel kullanım örneği</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$yiyecek </span><span style="color: #007700">= </span><span style="color: #DD0000">'börek'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$dönen_değer </span><span style="color: #007700">= match (</span><span style="color: #0000BB">$yiyecek</span><span style="color: #007700">) {<br />    </span><span style="color: #DD0000">'meyva' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Bu bir meyva'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'çorba' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Bu bir çorba'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'börek' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Bu bir börek'</span><span style="color: #007700">,<br />};<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$dönen_değer</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

  <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(13) &quot;Bu bir börek&quot;
</pre></div>
   </div>
  </div>
  <div class="example" id="example-3">
   <p><strong>Örnek 3 Karşılaştırma işleçleriyle <code class="literal">match</code> kullanımı</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$age </span><span style="color: #007700">= </span><span style="color: #0000BB">18</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$output </span><span style="color: #007700">= match (</span><span style="color: #0000BB">true</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$age </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"Bebek"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$age </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">13 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"Çocuk"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$age </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">19 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"Genç"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$age </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">19 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"Yetişkin"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$age </span><span style="color: #007700">&gt;= </span><span style="color: #0000BB">65 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"Yaşlı"<br /></span><span style="color: #007700">};<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$output</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

  <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(8) &quot;Genç&quot;
</pre></div>
   </div>
  </div>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <span class="simpara">
    <code class="literal">match</code> ifadesinin sonucunun kullanılmasına gerek yoktur.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <span class="simpara">
    <code class="literal">match</code> ifadesi <em>mutlaka</em> bir noktalı
    virgül <code class="literal">;</code> ile sonlandırılmalıdır.
   </span>
  </p></blockquote>
 </div>

 <p class="para">
  <code class="literal">match</code> ifadesi <code class="literal">switch</code> deyimine
  benzemekle birlikte bazı önemli farklar vardır:

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Bir <code class="literal">match</code> kolu, değeri birebir (<code class="code">===</code>)
     değerlendirir, <code class="literal">switch</code> deyimin yaptığı gibi gevşekçe
     değil.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">match</code> ifadesi bir değer döndürür.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">match</code> kolları <code class="literal">switch</code> deyimlerini
     yaptığı gibi sonraki durumlarda başarısız olmaz.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">match</code> ifadesi kapsamlı olmalıdır.
    </span>
   </li>
  </ul>
 </p>

 <p class="para">
  <code class="literal">switch</code> deyimleri gibi, <code class="literal">match</code> 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:
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$sonuç </span><span style="color: #007700">= match (</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">foo</span><span style="color: #007700">() =&gt; ...,<br />    </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar</span><span style="color: #007700">() =&gt; ..., </span><span style="color: #FF8000">//  foo() === $x ise $this-&gt;bar çağrılmaz<br />    </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">baz </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">beep</span><span style="color: #007700">(), </span><span style="color: #FF8000">// $x === $this-&gt;baz olmadıkça beep() çağrılmaz<br />    // vb.<br /></span><span style="color: #007700">};<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>

 <p class="para">
  <code class="literal">match</code> 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.
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$sonuç </span><span style="color: #007700">= match (</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />    </span><span style="color: #FF8000">// Bu eşleşme kolu:<br />    </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$c </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />    </span><span style="color: #FF8000">// Aşağıdaki üç eşleşme koluna eşdeğerdir:<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$b </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$c </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />};<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Özel bir durum <code class="literal">default</code> kalıbıdır.
  Bu kalıp evvelce eşleşmemiş herşeyle eşleşir.
  Örnek:
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$ifadeSonucu </span><span style="color: #007700">= match (</span><span style="color: #0000BB">$koşul</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">foo</span><span style="color: #007700">(),<br />    </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">4 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">bar</span><span style="color: #007700">(),<br />    default =&gt; </span><span style="color: #0000BB">baz</span><span style="color: #007700">(),<br />};<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <span class="simpara">
    Çok sayıda <code class="literal">default</code> kalıbı bir
    <strong><code>E_FATAL_ERROR</code></strong> hatasına (ölümcül hataya) yol açar.
   </span>
  </p></blockquote>
 </p>

 <p class="para">
  <code class="literal">match</code> ifadesi kapsamlı olmalıdır. Konu ifadesi herhangi
  bir eşleşme kolu tarafından işlenmezse, bir
  <span class="classname"><a href="class.unhandledmatcherror.php" class="classname">UnhandledMatchError</a></span> (başarısız eşleşme hatası)
  yavrulanır.
 </p>

 <div class="example" id="example-4">
  <p><strong>Örnek 4 - Başarısız eşleşme hatası örneği</strong></p>
  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$özne </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br /><br />try {<br />    match (</span><span style="color: #0000BB">$özne</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">foo</span><span style="color: #007700">(),<br />        </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">4 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">bar</span><span style="color: #007700">(),<br />    };<br />} catch (</span><span style="color: #0000BB">\UnhandledMatchError $e</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

  <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
  <div class="example-contents screen">
<div class="cdata"><pre>
object(UnhandledMatchError)#1 (7) {
  [&quot;message&quot;:protected]=&gt;
  string(33) &quot;Unhandled match value of type int&quot;
  [&quot;string&quot;:&quot;Error&quot;:private]=&gt;
  string(0) &quot;&quot;
  [&quot;code&quot;:protected]=&gt;
  int(0)
  [&quot;file&quot;:protected]=&gt;
  string(9) &quot;/in/ICgGK&quot;
  [&quot;line&quot;:protected]=&gt;
  int(6)
  [&quot;trace&quot;:&quot;Error&quot;:private]=&gt;
  array(0) {
  }
  [&quot;previous&quot;:&quot;Error&quot;:private]=&gt;
  NULL
}
</pre></div>
  </div>
 </div>

 <div class="sect2">
  <h3 class="title">- Başarısız eşleşmeleri işlemek için <code class="literal">match</code>
   ifadelerin kullanımı</h3>
  <p class="para">
   Özne ifadesi olarak true kullanarak özdeş olmayan koşullu durumları ele almak
   için bir <code class="literal">match</code> ifadesi kullanmak mümkündür.
  </p>

  <div class="example" id="example-5">
   <p><strong>Örnek 5 - Tamsayı aralıklarında dallanmak için genelleştirilmiş eşleşme
    ifadelerinin kullanılması</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$yaş </span><span style="color: #007700">= </span><span style="color: #0000BB">23</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= match (</span><span style="color: #0000BB">true</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$yaş </span><span style="color: #007700">&gt;= </span><span style="color: #0000BB">65 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'yaşlı'</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$yaş </span><span style="color: #007700">&gt;= </span><span style="color: #0000BB">25 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'yetişkin'</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$yaş </span><span style="color: #007700">&gt;= </span><span style="color: #0000BB">18 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'genç'</span><span style="color: #007700">,<br />    default =&gt; </span><span style="color: #DD0000">'çocuk'</span><span style="color: #007700">,<br />};<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;genç&quot;
</pre></div>
   </div>
  </div>

  <div class="example" id="example-6">
   <p><strong>Örnek 6 - Dize içeriklerde dallanmak için genelleştirilmiş eşleşme
    ifadelerinin kullanılması</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$text </span><span style="color: #007700">= </span><span style="color: #DD0000">'Bienvenue chez nous'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= match (</span><span style="color: #0000BB">true</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">str_contains</span><span style="color: #007700">(</span><span style="color: #0000BB">$text</span><span style="color: #007700">, </span><span style="color: #DD0000">'Welcome'</span><span style="color: #007700">) || </span><span style="color: #0000BB">str_contains</span><span style="color: #007700">(</span><span style="color: #0000BB">$text</span><span style="color: #007700">, </span><span style="color: #DD0000">'Hello'</span><span style="color: #007700">) =&gt; </span><span style="color: #DD0000">'en'</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">str_contains</span><span style="color: #007700">(</span><span style="color: #0000BB">$text</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bienvenue'</span><span style="color: #007700">) || </span><span style="color: #0000BB">str_contains</span><span style="color: #007700">(</span><span style="color: #0000BB">$text</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bonjour'</span><span style="color: #007700">) =&gt; </span><span style="color: #DD0000">'fr'</span><span style="color: #007700">,<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">};<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(2) &quot;fr&quot;
</pre></div>
   </div>
  </div>
 </div>
</div><?php manual_footer($setup); ?>