<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.functions.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'functions.anonymous.php',
    1 => 'Anonim işlevler',
    2 => 'Anonim işlevler',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'İşlevler',
  ),
  'prev' => 
  array (
    0 => 'functions.internal.php',
    1 => 'Yerleşik işlevler',
  ),
  'next' => 
  array (
    0 => 'functions.arrow.php',
    1 => 'Ok İşlevleri',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'language/functions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="functions.anonymous" class="sect1">
   <h2 class="title">Anonim işlevler</h2>
   <p class="simpara">
    Anonim işlevler isim belirtmeksizin oluşturulabilen işlevlerdir.
    Çoğunlukla <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> türünde bağımsız değişkenler olarak işlev
    bağımsız değişkenlerinde kullanılırsa da kullanımı bununla sınırlı değildir.
   </p>
   <p class="simpara">
    Anonim işlevler
    <a href="class.closure.php" class="link"><span class="classname"><a href="class.closure.php" class="classname">Closure</a></span></a>
    sınıfı kullanılarak gerçeklenir.
   </p>

    <div class="example" id="example-1">
     <p><strong>Örnek 1 - Anonim işlev örneği</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">preg_replace_callback</span><span style="color: #007700">(</span><span style="color: #DD0000">'~-([a-z])~'</span><span style="color: #007700">,<br />      function (</span><span style="color: #0000BB">$match</span><span style="color: #007700">) {<br />       return </span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(</span><span style="color: #0000BB">$match</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]);<br />      },<br />      </span><span style="color: #DD0000">'hello-world'</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Çıktısı: helloWorld<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   <p class="para">
    Anonim işlevler birer değişken değeri olarak da bildirilebilir. Bu
    durumda PHP, işlevi otomatik olarak  sınıfının nesnel bir örneği
    haline getirir. Bir anonim işlev, bir değişkene sıradan bir deyim gibi,
    bir noktalı virgül ile biten bir işlev olarak atanabilir:
   </p>
    <div class="example" id="example-2">
     <p><strong>Örnek 2 - Değişkene anonim işlev atama örneği</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$greet </span><span style="color: #007700">= function(</span><span style="color: #0000BB">$isim</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Merhaba %s\r\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$isim</span><span style="color: #007700">);<br />};<br /><br /></span><span style="color: #0000BB">$greet</span><span style="color: #007700">(</span><span style="color: #DD0000">'Dünya'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$greet</span><span style="color: #007700">(</span><span style="color: #DD0000">'PHP'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   <p class="simpara">
    Anonim işlevler değişkenleri üst etki alanından miras alabilirler. Böyle
    değişkenler <code class="literal">use</code> dil oluşumuna aktarılmalıdır.
    PHP 7.1 itibariyle, bu değişkenler <a href="language.variables.predefined.php" class="link">süper küreseller</a>,
    <var class="varname">$this</var> veya bir bağımsız değişken ile aynı isimdeki
    değişkenleri içeremez. İşlevin dönüş türü bildirimi
    <code class="literal">use</code> sözcüğünden <em>sonra</em> gelmelidir.
   </p>

   <div class="example" id="example-3">
    <p><strong>Örnek 3 Değikenleri üst etki alanından miras almak</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$message </span><span style="color: #007700">= </span><span style="color: #DD0000">'hello'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// "use" olmaksızın<br /></span><span style="color: #0000BB">$example </span><span style="color: #007700">= function () {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$message</span><span style="color: #007700">);<br />};<br /></span><span style="color: #0000BB">$example</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// $message miras alınır<br /></span><span style="color: #0000BB">$example </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$message</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$message</span><span style="color: #007700">);<br />};<br /></span><span style="color: #0000BB">$example</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Miras alınan değişkenin değeri işlevin tanımından gelir, çağrısından değil.<br /></span><span style="color: #0000BB">$message </span><span style="color: #007700">= </span><span style="color: #DD0000">'world'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$example</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// message sıfırlanır<br /></span><span style="color: #0000BB">$message </span><span style="color: #007700">= </span><span style="color: #DD0000">'hello'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Gönderimle miras alma<br /></span><span style="color: #0000BB">$example </span><span style="color: #007700">= function () use (&amp;</span><span style="color: #0000BB">$message</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$message</span><span style="color: #007700">);<br />};<br /></span><span style="color: #0000BB">$example</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Üst etki alanında değişen değer<br />// işlev çağrısı içinde yansıtılır.<br /></span><span style="color: #0000BB">$message </span><span style="color: #007700">= </span><span style="color: #DD0000">'world'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$example</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Anonim işlevler sıradan bağımsız değişkenleri de kabul edebilir<br /></span><span style="color: #0000BB">$example </span><span style="color: #007700">= function (</span><span style="color: #0000BB">$arg</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$message</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg </span><span style="color: #007700">. </span><span style="color: #DD0000">' ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$message</span><span style="color: #007700">);<br />};<br /></span><span style="color: #0000BB">$example</span><span style="color: #007700">(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Dönüş türü bildirimi use sözcüğündan sonra gelir<br /></span><span style="color: #0000BB">$example </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$message</span><span style="color: #007700">): </span><span style="color: #0000BB">string </span><span style="color: #007700">{<br />    return </span><span style="color: #DD0000">"hello </span><span style="color: #0000BB">$message</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br />};<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$example</span><span style="color: #007700">());<br />&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
Yukarıdaki örnek şuna benzer bir çıktı üretir:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Notice: Undefined variable: message in /example.php on line 6
NULL
string(5) &quot;hello&quot;
string(5) &quot;hello&quot;
string(5) &quot;hello&quot;
string(5) &quot;world&quot;
string(11) &quot;hello world&quot;
string(11) &quot;hello world&quot;
</pre></div>
    </div>
   </div>

   <p class="para">
    Etki alanından miras alınan değişkenler listesinin sonunda bir virgül
    varsa PHP 8.0.0 itibariyle bu virgül yoksayılmaktadır.
   </p>
   <p class="simpara">
    Üst etki alanından
    miras alınan değişkenler küresel değişkenler gibi ele alınmazlar.
    Küresel değişkenler, işlevin çalıştığı etki alanında tanımlı
    değişkenlerdir. Anonim işlevin üst etki alanı ise içinde bildirildiği
    işlevin etki alanıdır (Anonim işlevin bildirildiği etki alanı ile
    çağrıldığı etki alanı aynı olmak zorunda değildir). Aşağıdaki örneğe
    bakalım:
   </p>
    <div class="example" id="example-4">
     <p><strong>Örnek 4 - Anonim işlevler ve etki alanı</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Ürünleri eklemek üzere bir Sepet oluşturalım.<br />// Eklenen ürünlerin toplam fiyatını döndürmek<br />// üzere bir geriçağırım işlevi kullanalım.<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Sepet<br /></span><span style="color: #007700">{<br />  const </span><span style="color: #0000BB">PRICE_BUTTER </span><span style="color: #007700">= </span><span style="color: #0000BB">1.00</span><span style="color: #007700">;<br />  const </span><span style="color: #0000BB">PRICE_MILK </span><span style="color: #007700">= </span><span style="color: #0000BB">3.00</span><span style="color: #007700">;<br />  const </span><span style="color: #0000BB">PRICE_EGGS </span><span style="color: #007700">= </span><span style="color: #0000BB">6.95</span><span style="color: #007700">;<br /><br />  protected </span><span style="color: #0000BB">$ürünler </span><span style="color: #007700">= Array();<br /><br /><br />  public static function </span><span style="color: #0000BB">ekle</span><span style="color: #007700">(</span><span style="color: #0000BB">$ürün</span><span style="color: #007700">, </span><span style="color: #0000BB">$miktar</span><span style="color: #007700">)<br />  {<br />    </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ürünler</span><span style="color: #007700">[</span><span style="color: #0000BB">$ürün</span><span style="color: #007700">] = </span><span style="color: #0000BB">$miktar</span><span style="color: #007700">;<br />  }<br /><br /> public static function </span><span style="color: #0000BB">miktarıGetir</span><span style="color: #007700">(</span><span style="color: #0000BB">$ürün</span><span style="color: #007700">)<br /> {<br />    return isset(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ürünler</span><span style="color: #007700">[</span><span style="color: #0000BB">$ürün</span><span style="color: #007700">]) ? </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ürünler</span><span style="color: #007700">[</span><span style="color: #0000BB">$ürün</span><span style="color: #007700">] : </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">;<br /><br />  }<br /><br />  public function </span><span style="color: #0000BB">Toplam</span><span style="color: #007700">(</span><span style="color: #0000BB">$kdv</span><span style="color: #007700">)<br />  {<br />      </span><span style="color: #0000BB">$toplam </span><span style="color: #007700">= </span><span style="color: #0000BB">0.00</span><span style="color: #007700">;<br /><br />      </span><span style="color: #0000BB">$işlev </span><span style="color: #007700">=<br />          function (</span><span style="color: #0000BB">$miktar</span><span style="color: #007700">, </span><span style="color: #0000BB">$ürün</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$kdv</span><span style="color: #007700">, &amp;</span><span style="color: #0000BB">$toplam</span><span style="color: #007700">)<br />          {<br />              </span><span style="color: #0000BB">$birimFiyat </span><span style="color: #007700">= </span><span style="color: #0000BB">constant</span><span style="color: #007700">(</span><span style="color: #0000BB">__CLASS__ </span><span style="color: #007700">. </span><span style="color: #DD0000">"::FiYAT_" </span><span style="color: #007700">.<br />                  </span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(</span><span style="color: #0000BB">$ürün</span><span style="color: #007700">));<br />              </span><span style="color: #0000BB">$toplam </span><span style="color: #007700">+= (</span><span style="color: #0000BB">$birimFiyat </span><span style="color: #007700">* </span><span style="color: #0000BB">$miktar</span><span style="color: #007700">) * (</span><span style="color: #0000BB">$kdv </span><span style="color: #007700">+ </span><span style="color: #0000BB">1.0</span><span style="color: #007700">);<br />          };<br /><br />      </span><span style="color: #0000BB">array_walk</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ürünler</span><span style="color: #007700">, </span><span style="color: #0000BB">$işlev</span><span style="color: #007700">);<br />      return </span><span style="color: #0000BB">round</span><span style="color: #007700">(</span><span style="color: #0000BB">$toplam</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br />  }<br />}<br /><br /></span><span style="color: #0000BB">$sepetim </span><span style="color: #007700">= new </span><span style="color: #0000BB">Sepet</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Sepete birşeyler ekleyelim<br /></span><span style="color: #0000BB">$sepetim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ekle</span><span style="color: #007700">(</span><span style="color: #DD0000">'Peynir'</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$sepetim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ekle</span><span style="color: #007700">(</span><span style="color: #DD0000">'Süt'</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$sepetim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ekle</span><span style="color: #007700">(</span><span style="color: #DD0000">'Yumurta'</span><span style="color: #007700">, </span><span style="color: #0000BB">6</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// %5 KDV ile toplamı döndürelim<br /></span><span style="color: #007700">print </span><span style="color: #0000BB">$sepetim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">Toplam</span><span style="color: #007700">(</span><span style="color: #0000BB">0.05</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// sonuç: is 54.29<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>

   <div class="example" id="example-5">
    <p><strong>Örnek 5 <code class="literal">$this</code>&#039;in otomatik bağlanması</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Test<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">testing</span><span style="color: #007700">()<br />    {<br />        return function() {<br />            </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">);<br />        };<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$object </span><span style="color: #007700">= new </span><span style="color: #0000BB">Test</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$function </span><span style="color: #007700">= </span><span style="color: #0000BB">$object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">testing</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$function</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(Test)#1 (0) {
}
</pre></div>
    </div>
   </div>

   <p class="para">
    Bir sınıf başka bir sınıfın içinde bildirildiğinde
    <code class="literal">$this</code>&#039;i işlevin etki alanı içinde kullanılabilir
    kılarak otomatik olarak ona bağlanır. Bu otomatik bağlantı
    istenmiyorsa bunun yerine
    <a href="functions.anonymous.php#functions.anonymous-functions.static" class="link">statik
    anonim işlevler</a> kullanılabilir.
   </p>

   <div class="sect2" id="functions.anonymous-functions.static">
    <h3 class="title">Statik anonim işlevler</h3>
    <p class="para">
     Anonim işlevler statik olarak bildirilebilmektedir.
     Böylece, geçerli sınıfın otomatik olarak bunlara bağlanamaması
     sağlanabilir. Çalışma anında nesneler de otomatik olarak bunlara
     bağlanamayacaktır.
    </p>
    <p class="para">
     <div class="example" id="example-6">
      <p><strong>Örnek 6 - Statik anonim bir işlevin içinde <code class="literal">$this</code>
        kullanmaya çalışmak</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Foo<br /></span><span style="color: #007700">{<br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$func </span><span style="color: #007700">= static function() {<br />            </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">);<br />        };<br />        </span><span style="color: #0000BB">$func</span><span style="color: #007700">();<br />    }<br />};<br />new </span><span style="color: #0000BB">Foo</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>
Notice: Undefined variable: this in %s on line %d
NULL
</pre></div>
      </div>
     </div>
    </p>

    <p class="para">
     <div class="example" id="example-7">
      <p><strong>Örnek 7 - Statik anonim bir işleve bir nesne bağlamaya çalışmak</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$func </span><span style="color: #007700">= static function() {<br />    </span><span style="color: #FF8000">// işlev gövdesi<br /></span><span style="color: #007700">};<br /><br /></span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #0000BB">$func</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindTo</span><span style="color: #007700">(new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$func</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>
Warning: Cannot bind an instance to a static closure in %s on line %d
</pre></div>
      </div>
     </div>
    </p>
   </div>

   <div class="sect2">
    <h3 class="title">Sürüm Bilgisi</h3>
    <p class="para">
     <table class="doctable informaltable">
      
       <thead>
        <tr>
         <th>Sürüm: </th>
         <th>Açıklama</th>
        </tr>

       </thead>

       <tbody class="tbody">
        <tr>
         <td>7.1.0</td>
         <td>
          Anonim işlev değişkenleri <a href="language.variables.predefined.php" class="link">süper küreseller</a>,
          <var class="varname">$this</var> veya bir bağımsız değişken ile aynı isimdeki
          değişkenleri içeremez.
         </td>
        </tr>

       </tbody>
      
     </table>

    </p>
   </div>

   <div class="sect2">
    <h3 class="title">Notlar</h3>
    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <span class="simpara">
      <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>, <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>
      ve <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span> işlevini bir anonim işlev
      içinde kullanmak mümkündür.
     </span>
    </p></blockquote>
   </div>
  </div><?php manual_footer($setup); ?>