<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'language.oop5.magic.php',
    1 => 'Sihirli Y&ouml;ntemler',
    2 => 'Sihirli Y&ouml;ntemler',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Sınıflar ve Nesneler',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.iterations.php',
    1 => 'Nesne Yineleme',
  ),
  'next' => 
  array (
    0 => 'language.oop5.final.php',
    1 => 'final Anahtar S&ouml;zc&uuml;ğ&uuml;',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'language/oop5/magic.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.magic" class="sect1">
  <h2 class="title">Sihirli Yöntemler</h2>
  <p class="para">
   Sihirli yöntemler, bir nesne üzerinde belirli eylemler gerçekleştirildiğinde
   PHP&#039;nin öntanımlı eylemini geçersiz kılan özel yöntemlerdir.
  </p>
  <div class="caution"><strong class="caution">Dikkat</strong>
   <p class="simpara">
    <code class="literal">__</code> ile başlayan tüm yöntem isimleri PHP tarafından
    ayrılmıştır. Bu nedenle, PHP&#039;nin davranışını geçersiz kılmadıkça bu tür
    yöntem adlarının kullanılması önerilmez.
   </p>
  </div>
  <p class="para">
   Aşağıdakiler sihirli yöntem olarak ele alınır:
   
   <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a>,
   <a href="language.oop5.decon.php#object.destruct" class="link">__destruct()</a>,
   <a href="language.oop5.overloading.php#object.call" class="link">__call()</a>,
   <a href="language.oop5.overloading.php#object.callstatic" class="link">__callStatic()</a>,
   <a href="language.oop5.overloading.php#object.get" class="link">__get()</a>,
   <a href="language.oop5.overloading.php#object.set" class="link">__set()</a>,
   <a href="language.oop5.overloading.php#object.isset" class="link">__isset()</a>,
   <a href="language.oop5.overloading.php#object.unset" class="link">__unset()</a>,
   <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a>,
   <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a>,
   <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a>,
   <a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a>,
   <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a>,
   <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a>,
   <a href="language.oop5.magic.php#object.set-state" class="link">__set_state()</a>,
   <a href="language.oop5.cloning.php#object.clone" class="link">__clone()</a>,
   <a href="language.oop5.magic.php#object.debuginfo" class="link">__debugInfo()</a>,
   <a href="language.oop5.cloning.php#object.clone" class="link">__clone()</a> ve
   <a href="language.oop5.magic.php#object.debuginfo" class="link">__debugInfo()</a>.
  </p>

  <div class="warning"><strong class="warning">Uyarı</strong>
   
   <p class="simpara">
    <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a>,
    <a href="language.oop5.decon.php#object.destruct" class="link">__destruct()</a> ve
    <a href="language.oop5.cloning.php#object.clone" class="link">__clone()</a> hariç tüm sihirli yöntemler
    <em>mutlaka</em> <code class="literal">public</code> olarak
    bildirilmelidir, aksi takdirde bir <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
    çıktılanır. PHP 8.0.0 öcesinde,
    <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a>,
    <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a>,
    <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a>,
    <a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a> ve
    <a href="language.oop5.magic.php#object.set-state" class="link">__set_state()</a> sihirli yöntemleri
    için böyle bir uyarı yapılmazdı.
   </p>
  </div>
  <div class="warning"><strong class="warning">Uyarı</strong>
   <p class="para">
    Bir sihirli yöntemin tanımında yapılan tür bildirimleri bu belgede
    açıklandığı gibi yapılmalıdır. Aksi takdirde, ölümcül hata çıktılanır.
    PHP 8.0.0 öncesinde hiçbir uyarı yapılmazdı.
    Bundan başka, <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> ve
    <a href="language.oop5.decon.php#object.destruct" class="link">__destruct()</a> yöntemleri de
    bir dönüş türü bildirmemelidir, yoksa ölümcül hata oluşur.
   </p>
  </div>

  <div class="sect2" id="language.oop5.magic.sleep">
   <h3 class="title">
    <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> ve
    <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a>
   </h3>

   <div class="methodsynopsis dc-description" id="object.sleep">
    <span class="modifier">public</span>
    <span class="methodname"><strong>__sleep</strong></span>(): <span class="type"><a href="language.types.array.php" class="type array">array</a></span></div>


   <div class="methodsynopsis dc-description" id="object.wakeup"><span class="modifier">public</span>
    <span class="methodname"><strong>__wakeup</strong></span>(): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>


   <p class="para">
    <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> işlevi, sınıfın
    <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a>
    adında sihirli bir işleve sahip olup olmadığına bakar. Böyle bir işlev
    varsa herhangi bir dizileştirme işleminden önce bu işlev çalıştırılır.
    Bu işlev ile nesne üzerinde temizlik yapılabilir ve dizileştirilmesi
    gereken nesnenin tüm değişken isimlerinin bir dizi halinde döndürülmesi
    sağlanabilir. Eğer işlev hiçbir şey döndürmemişse <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>
    dizileştirilir ve bir <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> çıktılanır.
   </p>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     Ebeveyn sınıflardaki private özelliklerin isimlerini döndürmek
     <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> için imkansızdır. Bu
     yapılırsa <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> seviyesinde bir hata
     iletisi çıktılanır. Bunun yerine <span class="classname"><a href="class.serializable.php" class="classname">Serializable</a></span>
     arayüzünü kullanılabilir.
    </p>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     PHP 8.0.0 ve sonrasında, <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a>
     işlevinden dizi olmayan bir değerin döndürülmesi uyarı üretimine sebep olur.
     Evvelce, bildirim üretimine sebep oluyordu.
    </p>
   </p></blockquote>
   <p class="para">
    <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> işlevinin asıl kullanım
    amacı askıdaki veriyi göndermek gibi temizliğe benzer işlemler yapmaktır.
    Ayrıca, tümüyle kaydedilmesi gerekmeyen büyük bir nesne sözkonusu
    olduğunda da bu işlevden yararlanılabilir.
   </p>
   <p class="para">
    <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> işlevi tersine bir işlem yaparak
    <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a> adında bir sihirli
    işlevin varlığını araştırır.
    Böyle bir işlev varsa, bu işlev nesnenin sahip olduğu tüm özkaynakları
    yeniden oluşturabilir.
   </p>
   <p class="para">
    <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a> işlevinin asıl kullanım
    amacı, dizileştirme sırasında kaybedilebilen veritabanı bağlantılarını
    yeniden oluşturmak ve diğer ilklendirme işlemlerini yeniden yapmaktır.
   </p>
   <div class="example" id="example-1">
    <p><strong>Örnek 1 - Uyutma ve uyandırma</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">class </span><span style="color: #0000BB">Bağlantı<br /></span><span style="color: #007700">{<br />    protected </span><span style="color: #0000BB">$hat</span><span style="color: #007700">;<br />    private </span><span style="color: #0000BB">$dsn</span><span style="color: #007700">, </span><span style="color: #0000BB">$kullanıcı</span><span style="color: #007700">, </span><span style="color: #0000BB">$parola</span><span style="color: #007700">, </span><span style="color: #0000BB">$db</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$dsn</span><span style="color: #007700">, </span><span style="color: #0000BB">$kullanıcı</span><span style="color: #007700">, </span><span style="color: #0000BB">$parola</span><span style="color: #007700">, </span><span style="color: #0000BB">$db</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dsn </span><span style="color: #007700">= </span><span style="color: #0000BB">$dsn</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">kullanıcı </span><span style="color: #007700">= </span><span style="color: #0000BB">$kullanıcı</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">parola </span><span style="color: #007700">= </span><span style="color: #0000BB">$parola</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">db </span><span style="color: #007700">= </span><span style="color: #0000BB">$db</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bağlan</span><span style="color: #007700">();<br />    }<br /><br />    private function </span><span style="color: #0000BB">bağlan</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">hat </span><span style="color: #007700">= new </span><span style="color: #0000BB">PDO</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dsn</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">kullanıcı</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">parola</span><span style="color: #007700">);<br />    }<br /><br />    public function </span><span style="color: #0000BB">__sleep</span><span style="color: #007700">()<br />    {<br />       return array(</span><span style="color: #DD0000">'dsn'</span><span style="color: #007700">, </span><span style="color: #DD0000">'kullanıcı'</span><span style="color: #007700">, </span><span style="color: #DD0000">'parola'</span><span style="color: #007700">);<br />    }<br /><br />    public function </span><span style="color: #0000BB">__wakeup</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bağlan</span><span style="color: #007700">();<br />    }<br />}</span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="sect2" id="language.oop5.magic.serialize">
   <h3 class="title">
    <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a> ve
    <a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a>
   </h3>

   <div class="methodsynopsis dc-description" id="object.serialize">
    <span class="modifier">public</span> <span class="methodname"><strong>__serialize</strong></span>(): <span class="type"><a href="language.types.array.php" class="type array">array</a></span></div>


   <div class="methodsynopsis dc-description" id="object.unserialize"><span class="modifier">public</span> <span class="methodname"><strong>__unserialize</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$data</code></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>


   <p class="para">
    <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> işlevi, sınıfın
    <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a> sihirli adına
    sahip bir işlevinin olup olmadığına bakar. Varsa, bu işlev herhangi
    bir dizileştirmeden önce çalıştırılır. Nesnenin dizileştirilmiş biçimini
    temsil eden ilişkisel bir anahtar/değer çiftleri dizisi oluşturmalı ve
    döndürmelidir. Hiçbir dizi döndürülmezse, bir
    <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> yavrulanır.
   </p>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     Aynı nesnede hem <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a>
     hem de <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> tanımlanmışsa,
     sadece <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a>
     çağrılır. <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> ise yok
     sayılır. Nesne <a href="class.serializable.php" class="link">Serializable</a>
     arayüzünü gerçekliyorsa, arayüzün <code class="literal">serialize()</code> yöntemi
     yok sayılır ve yerine <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a>
     kullanılır.
    </p>
   </p></blockquote>
   <p class="para">
    <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a> yönteminin
    amaçlanan kullanımı, nesnenin dizileştirmeye uygun keyfi bir gösterimini
    tanımlamaktır. Dizinin öğeleri, nesnenin özelliklerine karşılık gelebilir,
    ancak bu gerekli değildir.
   </p>
   <p class="para">
    <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> işlevi ise tersine sınıfın
    <a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a> sihirli adına
    sahip bir işlevinin olup olmadığına bakar. Varsa, bu işlev
    <a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a> işlevinden
    döndürülen geri yüklenmiş diziye aktarılır. Daha sonra nesnenin
    özelliklerini uygun şekilde bu diziden geri yükleyebilir.
   </p>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     Aynı nesnede hem <a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a>
     hem de <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a> tanımlanmışsa,
     yalnızca <a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a>
     çağrılır. <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a> ise yok sayılır.
    </p>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     Özellik PHP 7.4.0&#039;dan beri kullanılabilmektedir.
    </p>
   </p></blockquote>
   <div class="example" id="example-2">
    <p><strong>Örnek 2 - Dizileştirme ve Nesneleştirme</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">class </span><span style="color: #0000BB">Connection<br /></span><span style="color: #007700">{<br />    protected </span><span style="color: #0000BB">$link</span><span style="color: #007700">;<br />    private </span><span style="color: #0000BB">$dsn</span><span style="color: #007700">, </span><span style="color: #0000BB">$username</span><span style="color: #007700">, </span><span style="color: #0000BB">$password</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$dsn</span><span style="color: #007700">, </span><span style="color: #0000BB">$username</span><span style="color: #007700">, </span><span style="color: #0000BB">$password</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dsn </span><span style="color: #007700">= </span><span style="color: #0000BB">$dsn</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">username </span><span style="color: #007700">= </span><span style="color: #0000BB">$username</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">password </span><span style="color: #007700">= </span><span style="color: #0000BB">$password</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">connect</span><span style="color: #007700">();<br />    }<br /><br />    private function </span><span style="color: #0000BB">connect</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">link </span><span style="color: #007700">= new </span><span style="color: #0000BB">PDO</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dsn</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">username</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">password</span><span style="color: #007700">);<br />    }<br /><br />    public function </span><span style="color: #0000BB">__serialize</span><span style="color: #007700">(): array<br />    {<br />        return [<br />          </span><span style="color: #DD0000">'dsn' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dsn</span><span style="color: #007700">,<br />          </span><span style="color: #DD0000">'user' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">username</span><span style="color: #007700">,<br />          </span><span style="color: #DD0000">'pass' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">password</span><span style="color: #007700">,<br />        ];<br />    }<br /><br />    public function </span><span style="color: #0000BB">__unserialize</span><span style="color: #007700">(array </span><span style="color: #0000BB">$data</span><span style="color: #007700">): </span><span style="color: #0000BB">void<br />    </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dsn </span><span style="color: #007700">= </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'dsn'</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">username </span><span style="color: #007700">= </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'user'</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">password </span><span style="color: #007700">= </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'pass'</span><span style="color: #007700">];<br /><br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">connect</span><span style="color: #007700">();<br />    }<br />}</span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="sect2" id="language.oop5.magic.tostring">
   <h3 class="title"><a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a></h3>

   <div class="methodsynopsis dc-description" id="object.tostring">
    <span class="modifier">public</span>
    <span class="methodname"><strong>__toString</strong></span>(): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>


   <p class="para">
    <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a> yöntemi, sınıf bir
    dizgeye dönüştürüldüğünde sınıfın nasıl tepki vereceğine karar vermeyi
    sağlar. Örneğin, <code class="literal">echo $obj;</code> ile ne basılacağı gibi.
   </p>
   <div class="warning"><strong class="warning">Uyarı</strong>
    <p class="para">
     PHP 8.0.0&#039;dan itibaren, dönüş değerine standart PHP tür anlamlandırması
     uygulanmaktadır, yani
     <a href="language.types.declarations.php#language.types.declarations.strict" class="link">katı kodlama</a>
     devre dışı bırakılırsa, mümkün olduğu takdirde değer <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
     türe zorlanır.
    </p>
    <p class="para">
     <a href="language.types.declarations.php#language.types.declarations.strict" class="link">strict typing</a>
     etkinken <span class="interfacename"><a href="class.stringable.php" class="interfacename">Stringable</a></span> nesnesi
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span> tür bildirimi tarafından kabul edilmez.
     Bunun olması isteniyorsa <span class="interfacename"><a href="class.stringable.php" class="interfacename">Stringable</a></span> ve
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span> türleri birleşim türü bildirimi içinde
     birleştirilmelidir.
    </p>
    <p class="para">
     PHP 8.0.0&#039;dan itibaren, <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a>
     yöntemi içeren her sınıf örtük olarak
     <span class="interfacename"><a href="class.stringable.php" class="interfacename">Stringable</a></span> arayüzünü de gerçekler ve
     dolayısıyla bu arayüz için tür sınamaları yapılmaz. Bu durumda,
     arayüzün doğrudan gerçeklenmesi tercih edilmelidir.
    </p>
    <p class="para">
     PHP 7.4&#039;te, döndürülen değer <em>mutlaka</em>
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span> türünde olmalıdır, aksi takdirde bir
     <span class="classname"><a href="class.error.php" class="classname">Error</a></span> yavrulanır.
    </p>
    <p class="para">
     PHP 7.4.0 öncesinde, döndürülen değer <em>mutlaka</em>
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span> türünde olmalıydı, aksi takdirde ölümcül bir
     <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong> çıktılanırdı.
    </p>
   </div>
   <div class="warning"><strong class="warning">Uyarı</strong>
    <p class="simpara">
     <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a> yönteminin içinden
     bir istisna yavrulatılamaz. PHP 7.4.0 öncesinde, bunun yapılması ölümcül
     hata ile sonuçlanırdı.
    </p>
   </div>
   <div class="example" id="example-3">
    <p><strong>Örnek 3 - Basit bir örnek</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">// Basit bir sınıf tanımlayalım<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">TestClass<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">__toString</span><span style="color: #007700">()<br />    {<br />        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$class </span><span style="color: #007700">= new </span><span style="color: #0000BB">TestClass</span><span style="color: #007700">(</span><span style="color: #DD0000">'Merhaba'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$class</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>
Merhaba
</pre></div>
    </div>
   </div>
  </div>

  <div class="sect2" id="language.oop5.magic.invoke">
   <h3 class="title"><a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a></h3>

   <div class="methodsynopsis dc-description" id="object.invoke">
    <span class="methodname"><strong>__invoke</strong></span>(<span class="methodparam"> <code class="parameter">...$values</code></span>): <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span></div>


   <p class="para">
    <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a> yöntemi, bir betik bir
    nesneyi bir işlev olarak çağırmaya çalışırsa çağrılır.
   </p>
   <div class="example" id="example-4">
    <p><strong>Örnek 4 - <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a> kullanımı</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">class </span><span style="color: #0000BB">CallableClass<br /></span><span style="color: #007700">{<br />  public function </span><span style="color: #0000BB">__invoke</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">)<br />  {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">);<br />  }<br />}<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">CallableClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$obj</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">is_callable</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</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>
int(5)
bool(true)
</pre></div>
    </div>
   </div>
   <div class="example" id="example-5">
    <p><strong>Örnek 5 - <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a> kullanımı</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">class </span><span style="color: #0000BB">Sort<br /></span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$key</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">string $key</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">key </span><span style="color: #007700">= </span><span style="color: #0000BB">$key</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">__invoke</span><span style="color: #007700">(array </span><span style="color: #0000BB">$a</span><span style="color: #007700">, array </span><span style="color: #0000BB">$b</span><span style="color: #007700">): </span><span style="color: #0000BB">int<br />    </span><span style="color: #007700">{<br />        return </span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">key</span><span style="color: #007700">] &lt;=&gt; </span><span style="color: #0000BB">$b</span><span style="color: #007700">[</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">key</span><span style="color: #007700">];<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$müşteriler </span><span style="color: #007700">= [<br />    [</span><span style="color: #DD0000">'no' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">'isim' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'John'</span><span style="color: #007700">, </span><span style="color: #DD0000">'soyisim' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Do'</span><span style="color: #007700">],<br />    [</span><span style="color: #DD0000">'no' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #DD0000">'isim' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Alice'</span><span style="color: #007700">, </span><span style="color: #DD0000">'soyisim' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Gustav'</span><span style="color: #007700">],<br />    [</span><span style="color: #DD0000">'no' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'isim' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Bob'</span><span style="color: #007700">, </span><span style="color: #DD0000">'soyisim' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Filipe'</span><span style="color: #007700">]<br />];<br /><br /></span><span style="color: #FF8000">// $müşterileri isme göre sırala<br /></span><span style="color: #0000BB">usort</span><span style="color: #007700">(</span><span style="color: #0000BB">$müşteriler</span><span style="color: #007700">, new </span><span style="color: #0000BB">Sort</span><span style="color: #007700">(</span><span style="color: #DD0000">'isim'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$müşteriler</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// $müşterileri soyisme göre sırala<br /></span><span style="color: #0000BB">usort</span><span style="color: #007700">(</span><span style="color: #0000BB">$müşteriler</span><span style="color: #007700">, new </span><span style="color: #0000BB">Sort</span><span style="color: #007700">(</span><span style="color: #DD0000">'soyisim'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$müşteriler</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>
Array
(
    [0] =&gt; Array
        (
            [no] =&gt; 3
            [isim] =&gt; Alice
            [soyisim] =&gt; Gustav
        )

    [1] =&gt; Array
        (
            [no] =&gt; 2
            [isim] =&gt; Bob
            [soyisim] =&gt; Filipe
        )

    [2] =&gt; Array
        (
            [no] =&gt; 1
            [isim] =&gt; John
            [soyisim] =&gt; Do
        )

)
Array
(
    [0] =&gt; Array
        (
            [no] =&gt; 1
            [isim] =&gt; John
            [soyisim] =&gt; Do
        )

    [1] =&gt; Array
        (
            [no] =&gt; 2
            [isim] =&gt; Bob
            [soyisim] =&gt; Filipe
        )

    [2] =&gt; Array
        (
            [no] =&gt; 3
            [isim] =&gt; Alice
            [soyisim] =&gt; Gustav
        )

)
</pre></div>
    </div>
   </div>
  </div>

  <div class="sect2" id="language.oop5.magic.set-state">
   <h3 class="title"><a href="language.oop5.magic.php#object.set-state" class="link">__set_state()</a></h3>

   <div class="methodsynopsis dc-description" id="object.set-state">
    <span class="modifier">static</span>
    <span class="methodname"><strong>__set_state</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$özellikler</code></span>): <span class="type"><a href="language.types.object.php" class="type object">object</a></span></div>


   <p class="para">
    Bu <a href="language.oop5.static.php" class="link">statik</a> yöntem,
    <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span> tarafından ihraç edilen
    sınıflar için çağrılır.
   </p>
   <p class="para">
    Bu yöntemin tek bağımsız değişkeni
    <code class="literal">[&#039;</code><span class="replaceable">özellik</span><code class="literal">&#039; =&gt;
    </code><span class="replaceable">değer</span><code class="literal">, ...]</code>
    biçeminde ihraç edilen özellikleri içeren bir dizidir.
   </p>
   <div class="example" id="example-6">
    <p><strong>Örnek 6 - <a href="language.oop5.magic.php#object.set-state" class="link">__set_state()</a> kullanımı
    </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">A<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$var1</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$var2</span><span style="color: #007700">;<br /><br />    public static function </span><span style="color: #0000BB">__set_state</span><span style="color: #007700">(</span><span style="color: #0000BB">$bir_dizi</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">var1 </span><span style="color: #007700">= </span><span style="color: #0000BB">$bir_dizi</span><span style="color: #007700">[</span><span style="color: #DD0000">'var1'</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">var2 </span><span style="color: #007700">= </span><span style="color: #0000BB">$bir_dizi</span><span style="color: #007700">[</span><span style="color: #DD0000">'var2'</span><span style="color: #007700">];<br />        return </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">var1 </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">var2 </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /><br />eval(</span><span style="color: #DD0000">'$c = ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$b </span><span style="color: #007700">. </span><span style="color: #DD0000">';'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</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(60) &quot;A::__set_state(array(
   &#039;var1&#039; =&gt; 5,
   &#039;var2&#039; =&gt; &#039;foo&#039;,
))&quot;
object(A)#2 (2) {
  [&quot;var1&quot;]=&gt;
  int(5)
  [&quot;var2&quot;]=&gt;
  string(3) &quot;foo&quot;
}
</pre></div>
    </div>
   </div>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <span class="simpara">
     Bir nesne ihraç edilirken, <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span> işlevi
     <a href="language.oop5.magic.php#object.set-state" class="link">__set_state()</a> nesnenin sınıfı
     tarafından gerçeklenmiş mi diye bakmaz,  dolayısıyla böyle nesnelerin
     yeniden ithali __set_state() hiç gerçeklenmemiş gibi bir
     <span class="classname"><a href="class.error.php" class="classname">Error</a></span> istisnası yavrulanmasına sebep olur.
     Bu kısmen bazı dahili sınıfları da etkiler.
    </span>
    <span class="simpara">
     Sadece, __set_state() gerçekleyen sınıfın nesnelerinin yeniden ithal
     edilmesini sağlamak yazılımcının sorumluluğundadır.
    </span>
   </p></blockquote>
  </div>

  <div class="sect2" id="language.oop5.magic.debuginfo">
   <h3 class="title"><a href="language.oop5.magic.php#object.debuginfo" class="link">__debugInfo()</a></h3>

   <div class="methodsynopsis dc-description" id="object.debuginfo">
    <span class="methodname"><strong>__debugInfo</strong></span>(): <span class="type"><a href="language.types.array.php" class="type array">array</a></span></div>


   <p class="para">
    Gösterilmesi gereken özelliklerini döndürmek için bir nesne
    dökümleneceği zaman bu yöntem <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span> tarafından
    çağrılır.
   </p>
   <div class="example" id="example-7">
    <p><strong>Örnek 7 - <a href="language.oop5.magic.php#object.debuginfo" class="link">__debugInfo()</a>
      kullanımı</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">class </span><span style="color: #0000BB">C </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$prop</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prop </span><span style="color: #007700">= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">__debugInfo</span><span style="color: #007700">() {<br />        return [<br />            </span><span style="color: #DD0000">'propSquared' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prop </span><span style="color: #007700">** </span><span style="color: #0000BB">2</span><span style="color: #007700">,<br />        ];<br />    }<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(new </span><span style="color: #0000BB">C</span><span style="color: #007700">(</span><span style="color: #0000BB">42</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>
object(C)#1 (1) {
  [&quot;propSquared&quot;]=&gt;
  int(1764)
}
</pre></div>
    </div>
   </div>
  </div>
 </div><?php manual_footer($setup); ?>