<?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.decon.php',
    1 => 'Kurucular ve Yıkıcılar',
    2 => 'Kurucular ve Yıkıcılar',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Sınıflar ve Nesneler',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.autoload.php',
    1 => 'Otomatik Y&uuml;klenen Sınıflar',
  ),
  'next' => 
  array (
    0 => 'language.oop5.visibility.php',
    1 => 'G&ouml;r&uuml;n&uuml;rl&uuml;k',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'language/oop5/decon.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.decon" class="sect1">
  <h2 class="title">Kurucular ve Yıkıcılar</h2>

  <div class="sect2" id="language.oop5.decon.constructor">
   <h3 class="title">Kurucular</h3>
   <div class="methodsynopsis dc-description" id="object.construct">
    <span class="methodname"><strong>__construct</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">...$değerler</code><span class="initializer"> = &quot;&quot;</span></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

   <p class="para">
    PHP geliştiricilerin sınıflar için kurucu yöntemler bildirmesine
    imkan verir. Bir kurucu yöntemi olan sınıflar her yeni nesne
    oluşturuluşunda bu yöntemi çağırırlar, bu bakımdan nesne kullanılmadan
    önce yapılması gereken ilklendirmeler için kurucular çok uygundur.
   </p>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <span class="simpara">
     Çocuk sınıflardan kurucusu olanlar için örtük olarak ebeveyn sınıfın
     kurucusu çağrılmaz. Ebeveyn sınıfın kurucusunu çocuk sınıftan çağırmak
     için, çocuk sınıf içinden <span class="function"><strong>parent::__construct()</strong></span>
     çağrısı yapılması gerekir. Çocuğun bir kurucu tanımlamaması halinde,
     normal sınıf yöntemi gibi (eğer private olarak tanımlanmadıysa) ana
     sınıftan miras alınabilir.
    </span>
   </p></blockquote>
   <div class="example" id="example-1">
    <p><strong>Örnek 1 - Miras almada kurucuların 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">AnaSınıf </span><span style="color: #007700">{<br />   function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">() {<br />      print </span><span style="color: #DD0000">"AnaSınıf kurucusundayız\n"</span><span style="color: #007700">;<br />   }<br />}<br /><br />class </span><span style="color: #0000BB">AltSınıf </span><span style="color: #007700">extends </span><span style="color: #0000BB">AnaSınıf </span><span style="color: #007700">{<br />   function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">() {<br />      </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">__construct</span><span style="color: #007700">();<br />      print </span><span style="color: #DD0000">"AltSınıf kurucusundayız\n"</span><span style="color: #007700">;<br />   }<br />}<br /><br />class </span><span style="color: #0000BB">DiğerAltSınıf </span><span style="color: #007700">extends </span><span style="color: #0000BB">AnaSınıf </span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// AnaSınıf'ın kurucusunu miras alır<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// AnaSınıf kurucusunda<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">AnaSınıf</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// AnaSınıf kurucusunda<br />// AltSınıf kurucusunda<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">AltSınıf</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// AnaSınıf kurucusunda<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">DiğerAltSınıf</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <p class="para">
    Diğer yöntemlerin tersine,
    <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> genişletilirken
    olağan  <a href="language.oop5.basic.php#language.oop.lsp" class="link">bağımsız değişken sırası uyumluluk
    kurallarından</a> muaftır.
   </p>
   <p class="para">
    Kurucular, karşılık gelen nesnelerinin somutlaştırılması sırasında çağrılan
    sıradan yöntemlerdir. Bu nedenle, gerekli olabilen, bir türe ve öntanımlı
    bir değere sahip olabilen rastgele sayıda bağımsız değişken tanımlayabilirler.
    Kurucu bağımsız değişkenleri, sınıf adından sonra gelen parantezlerin içine
    yerleştirilerek çağrılır.
   </p>
   <div class="example" id="example-2">
    <p><strong>Örnek 2 - Kurucu bağımsız değişkenlerinin 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">Point </span><span style="color: #007700">{<br />    protected </span><span style="color: #0000BB">int $x</span><span style="color: #007700">;<br />    protected </span><span style="color: #0000BB">int $y</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">int $x</span><span style="color: #007700">, </span><span style="color: #0000BB">int $y </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">x </span><span style="color: #007700">= </span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">y </span><span style="color: #007700">= </span><span style="color: #0000BB">$y</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #FF8000">// Bağımsız değişkenlerin ikisini de aktaralım<br /></span><span style="color: #0000BB">$p1 </span><span style="color: #007700">= new </span><span style="color: #0000BB">Point</span><span style="color: #007700">(</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Yalnız gerekli bağımsız değişkeni aktaralım.<br />// $y öntanımlı olan 0 değerini alır.<br /></span><span style="color: #0000BB">$p2 </span><span style="color: #007700">= new </span><span style="color: #0000BB">Point</span><span style="color: #007700">(</span><span style="color: #0000BB">4</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// isimli bağımsız değişken kullanımı (PHP 8.0 ve sonrası):<br /></span><span style="color: #0000BB">$p3 </span><span style="color: #007700">= new </span><span style="color: #0000BB">Point</span><span style="color: #007700">(</span><span style="color: #0000BB">y</span><span style="color: #007700">: </span><span style="color: #0000BB">5</span><span style="color: #007700">, </span><span style="color: #0000BB">x</span><span style="color: #007700">: </span><span style="color: #0000BB">4</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <p class="para">
    Bir sınıf kurucuya sahip değilse veya kurucu bağımsız değişkensizse yaylı ayraçlar
    konmayabilir.
   </p>
   <div class="sect3">
    <h4 class="title">Eski tarz kurucular</h4>
    <p class="para">
     PHP 8.0.0&#039;dan önce, genel isim alanındaki sınıflar, eski tarz kurucu ile
     aynı adı taşıyan bir yöntemi yorumlar. Bu sözdizimi kaldırılmış olup bir
     <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong> hatasıyla sonuçlanırsa da yöntem yine de
     bir kurucu olarak çağrılır.
     Hem <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> hem de aynı adı
     taşıyan yöntem tanımlanmışsa
     <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> çağrılır.
    </p>
    <p class="para">
     İsim alanlı sınıflarda veya PHP 8.0.0 öncesinde herhangi bir sınıfta,
     sınıfla aynı ismi taşıyan bir yöntemin özel bir anlamı yoktur.
    </p>
    <p class="para">
    Yeni kodlarda daima <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a>
    kullanın.
    </p>
   </div>
   <div class="sect3" id="language.oop5.decon.constructor.promotion">
    <h4 class="title">Kurucu Tanıtımı</h4>
    <p class="para">
     PHP 8.0.0&#039;dan itibaren, kurucu bağımsız değişkenleri de bir nesne
     özelliğine karşılık gelecek şekilde tanıtılabilir. Kurucu bağımsız
     değişkenlerinin kurucudaki bir özelliğe atanması, ancak başka şekilde
     çalıştırılmaması çok yaygındır. Kurucu tanıtımı, bu kullanım durumu için
     kestirme bir yol sağlar. Yukarıdaki örnek aşağıdaki gibi yeniden
     yazılabilir.
    </p>
    <div class="example" id="example-3">
     <p><strong>Örnek 3 - Kurucu özelliği tanıtımının 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">Point </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(protected </span><span style="color: #0000BB">int $x</span><span style="color: #007700">, protected </span><span style="color: #0000BB">int $y </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />    }<br />}</span></span></code></div>
     </div>

    </div>
    <p class="para">
     Bir kurucu bağımsız değişkeni değiştirici içerdiğinde,
     PHP bunu hem nesne özelliği hem de kurucu bağımsız değişkeni olarak
     yorumlar ve özelliğe bağımsız değişkenin değerini atar. Kurucu gövdesi
     boş olabilir veya başka ifadeler içerebilir. Bu ifadeler, bağımsız
     değişken değerleri karşılık gelen özelliklere atandıktan sonra
     yorumlanır.
    </p>
    <p class="para">
     Tüm bağımsız değişkenlerin tanıtımı gerekmez. Tanıtılan ve tanıtılmayan
     bağımsız değişkenleri herhangi bir sırayla karıştırmak ve eşleştirmek
     mümkündür. Tanıtılan bağımsız değişkenlerin kurucuyu çağıran kod
     üzerinde hiçbir etkisi yoktur.
    </p>
    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <p class="para">
      <a href="language.oop5.visibility.php" class="link">Görünürlük değiştirici</a>
      (<code class="literal">public</code>, <code class="literal">protected</code> veya
      <code class="literal">private</code>) kullanımı, özellik tanıtımı yapmanın
      en olası yoludur, ancak diğer herhangi bir tek değiştirici de
      (<code class="literal">salt okunur</code> gibi) aynı etkiye sahip olacaktır.
     </p>
    </p></blockquote>
    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <p class="para">
      Nesne özellikleri, ortaya çıkabilecek motor belirsizliği nedeniyle
      <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> türde olamaz. Tanıtılan bağımsız değişkenler de
      bu nedenle <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> türde olamaz. Bununla birlikte, başka
      herhangi bir <a href="language.types.declarations.php" class="link">tür
       bildirimine</a> izin verilir.
     </p>
    </p></blockquote>
    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <p class="para">
      Tanıtılan özellikler, hem özellik hem de işlev bağımsız değişkenlerinin
      yeniden yorumlanmasını sağladığından, hem özellikler hem de bağımsız
      değişkenler için tüm adlandırma kısıtlamaları geçerlidir.
     </p>
    </p></blockquote>
    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <p class="para">
      Tanıtılan kurucu bağımsız değişkenlerine yerleştirilen
      <a href="language.attributes.php" class="link">öznitelikler</a>,
      hem özelliğe hem de bağımsız değişkene atanır. Tanıtılan kurucu
      bağımsız değişkenindeki öntanımlı değerler, özelliğe değil, yalnızca
      bağımsız değişkene atanır.
     </p>
    </p></blockquote>
   </div>

   <div class="sect3" id="language.oop5.decon.constructor.new">
    <h4 class="title">İlkendiricilerde new kullanımı</h4>
    <p class="para">
     PHP 8.1.0 ve sonrasında, nesneler öznitelik bağımsız değişkenlerinin
     yanısıra öntanımlı bağımsız değişkenler, statik bağımsız değişkenler ve
     küresel sabitler olarak kullanılabilmektedir. Buna ek olarak, nesneler
     <span class="function"><a href="function.define.php" class="function">define()</a></span>&#039;a da aktarılabilmektedir.
    </p>
    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <p class="para">
      Dinamik veya dizge olmayan bir sınıf adının veya anonim bir sınıfın
      kullanımına izin verilmez. Bağımsız değişken genişletmeye izin
      verilmez. Desteklenmeyen ifadelerin bağımsız değişken olarak
      kullanımına izin verilmez.
     </p>
    </p></blockquote>
    <div class="example" id="example-4">
     <p><strong>Örnek 4 Using new in initializers</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: #FF8000">// All allowed:<br /></span><span style="color: #007700">static </span><span style="color: #0000BB">$x </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">C </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$param </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">) {}<br /><br />#[</span><span style="color: #0000BB">AnAttribute</span><span style="color: #007700">(new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">)]<br />class </span><span style="color: #0000BB">Test </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(<br />        public </span><span style="color: #0000BB">$prop </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">,<br />    ) {}<br />}<br /><br /></span><span style="color: #FF8000">// Hiçbirine izin verilmez (derleme-anı hatası):<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= new (</span><span style="color: #0000BB">CLASS_NAME_CONSTANT</span><span style="color: #007700">)(), </span><span style="color: #FF8000">// dinamik sınıf adı<br />    </span><span style="color: #0000BB">$b </span><span style="color: #007700">= new class {}, </span><span style="color: #FF8000">// anonim sınıf<br />    </span><span style="color: #0000BB">$c </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">(...[]), </span><span style="color: #FF8000">// bağımsız değişken genişletme<br />    </span><span style="color: #0000BB">$d </span><span style="color: #007700">= new </span><span style="color: #0000BB">B</span><span style="color: #007700">(</span><span style="color: #0000BB">$abc</span><span style="color: #007700">), </span><span style="color: #FF8000">// desteklenmeyen sabit ifadesi<br /></span><span style="color: #007700">) {}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </div>

   <div class="sect3" id="language.oop5.decon.constructor.static">
    <h4 class="title">Statik kurucu yöntemleri</h4>
    <p class="para">
     PHP, sınıf başına yalnızca tek bir kurucuyu destekler. Bununla birlikte,
     bazı durumlarda, bir nesnenin farklı girdilere sahip farklı yollarla
     oluşturulabilmesi istenebilir. Bunu yapmanın önerilen yolu, kurucu
     sarmalayıcıları olarak statik yöntemler kullanmaktır.
    </p>
    <div class="example" id="example-5">
     <p><strong>Örnek 5 - Statik kurucu yöntemlerinin 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">Product </span><span style="color: #007700">{<br /><br />    private ?</span><span style="color: #0000BB">int $id</span><span style="color: #007700">;<br />    private ?</span><span style="color: #0000BB">string $name</span><span style="color: #007700">;<br /><br />    private function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(?</span><span style="color: #0000BB">int $id </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">, ?</span><span style="color: #0000BB">string $name </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id </span><span style="color: #007700">= </span><span style="color: #0000BB">$id</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br />    }<br /><br />    public static function </span><span style="color: #0000BB">fromBasicData</span><span style="color: #007700">(</span><span style="color: #0000BB">int $id</span><span style="color: #007700">, </span><span style="color: #0000BB">string $name</span><span style="color: #007700">): static {<br />        </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new static(</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />        return </span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />    }<br /><br />    public static function </span><span style="color: #0000BB">fromJson</span><span style="color: #007700">(</span><span style="color: #0000BB">string $json</span><span style="color: #007700">): static {<br />        </span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">json_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">$json</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br />        return new static(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'id'</span><span style="color: #007700">], </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">]);<br />    }<br /><br />    public static function </span><span style="color: #0000BB">fromXml</span><span style="color: #007700">(</span><span style="color: #0000BB">string $xml</span><span style="color: #007700">): static {<br />        </span><span style="color: #FF8000">// Özelleştirmeler buraya.<br />        </span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">convert_xml_to_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$xml</span><span style="color: #007700">);<br />        </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new static();<br />        </span><span style="color: #0000BB">$new</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id </span><span style="color: #007700">= </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'id'</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$new</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">];<br />        return </span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$p1 </span><span style="color: #007700">= </span><span style="color: #0000BB">Product</span><span style="color: #007700">::</span><span style="color: #0000BB">fromBasicData</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">, </span><span style="color: #DD0000">'Widget'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$p2 </span><span style="color: #007700">= </span><span style="color: #0000BB">Product</span><span style="color: #007700">::</span><span style="color: #0000BB">fromJson</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_json_string</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$p3 </span><span style="color: #007700">= </span><span style="color: #0000BB">Product</span><span style="color: #007700">::</span><span style="color: #0000BB">fromXml</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_xml_string</span><span style="color: #007700">);</span></span></code></div>
     </div>

    </div>
    <p class="para">
     Kurucu, haricen çağrılmasını önlemek için özel veya korumalı yapılabilir.
     Bu durumda, sınıfı yalnızca statik bir yöntem örnekleyebilir. Aynı sınıf
     tanımında olduklarından, aynı nesne örneğinde olmasa bile özel yöntemlere
     erişebilirler. Özel kurucu isteğe bağlıdır ve kullanım durumuna bağlı
     olarak anlamlı olabilir veya olmayabilir.
    </p>
    <p class="para">
     Nesneyi örneklemenin farklı yollarını göstermek için üç tür public static
     yöntem vardır.
    </p>
    <ul class="simplelist">
     <li><code class="code">fromBasicData()</code> gerekli bağımsız değişkenleri alıp kurucuyu
      çalıştırarak nesney oluşturur vesonucu döndürür.</li>
     <li><code class="code">fromJson()</code> bir JSON dizesi alıp bazı önişlemlerden
      geçirip kurucuya gereken biçime dönüştürür ve yeni nesneyi döndürür.
     </li>
     <li><code class="code">fromXml()</code> bir XML dizesi alıp önişemden geçirerek
      çıplak bir nesne oluşurur. Kurucu hala çağrılabilirse de bağımsız değişkenlerin
      tamamı seçimlik olduğundan yöntem bunları yoksayar. Sonucu döndürmeden
      önce değerleri doğrudan nesne özelliklerine atar.</li>
    </ul>
    <p class="para">
     Üç durumda da, <code class="code">static</code> anahtar sözcüğü, kodun bulunduğu sınıfın
     adına çevrilir. Bu durumda, <code class="code">Product</code>.
    </p>
   </div>
  </div>

  <div class="sect2" id="language.oop5.decon.destructor">
   <h3 class="title">Yıkıcılar</h3>
   <div class="methodsynopsis dc-description" id="object.destruct">
    <span class="methodname"><strong>__destruct</strong></span>(): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

   <p class="para">
    PHP C++ gibi nesne yönelimli dillerdekine benzer bir yıkıcı tasarımına
    sahiptir. Yıkıcı yöntem, belli bir nesneye başka bir gönderim yoksa veya
    nesne kapanma sırasında açıkça yok edildiği anda çalıştırılacaktır.
   </p>
   <div class="example" id="example-6">
    <p><strong>Örnek 6 - Yıkıcı Ö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">class </span><span style="color: #0000BB">YıkıcıSınıf<br /></span><span style="color: #007700">{<br />   function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />   {<br />       print </span><span style="color: #DD0000">"Kurucu çalıştı\n"</span><span style="color: #007700">;<br />   }<br /><br />   function </span><span style="color: #0000BB">__destruct</span><span style="color: #007700">()<br />   {<br />       print </span><span style="color: #DD0000">"" </span><span style="color: #007700">. </span><span style="color: #0000BB">__CLASS__ </span><span style="color: #007700">. </span><span style="color: #DD0000">" yok ediliyor\n"</span><span style="color: #007700">;<br />   }<br />}<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">YıkıcıSınıf</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <p class="para">
    Kurucularda olduğu gibi ebeveyn yıkıcılar çocuk sınıflar için dolaylı
    olarak çağrılmayacaktır. Ebeveyn sınıfın yıkıcısının çalışması için çocuk
    sınıfın yıkıcısından <span class="function"><strong>parent::__destruct()</strong></span> çağrısının
    yapılması gerekir. Ayrıca, kuruculardaki gibi, bir çocuk sınıf
    kendisininkini gerçeklemediyse ebeveyninin yıkıcısını miras alabilir.
   </p>
   <p class="para">
    Betiğin icrası <span class="function"><a href="function.exit.php" class="function">exit()</a></span> kullanılarak durdurulsa bile
    yıkıcı çağrılacaktır. <span class="function"><a href="function.exit.php" class="function">exit()</a></span> işlevinin bir yıkıcı
    içersinde çağrılması kalan kapanma yordamlarının icrasını engelleyecektir.
    </p>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
      Yıkıcılar, HTTP başlıklarının gönderilmiş olmasını sağlamak için betik
      sonlanırken çağrılırlar. Betiğin kapanma aşamasındaki çalışma dizini
      bazı SAPI’lerde (Apache gibi) farklı olabilir.
    </p>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
      Bir yıkıcı içinden bir istisna oluşturmaya çalışmak (betiğin
      sonlandırılması sırasında) ölümcül hata ile sonuçlanır.
    </p>
   </p></blockquote>
  </div>

 </div><?php manual_footer($setup); ?>