<?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.inheritance.php',
    1 => 'Nesnelerin Kalıtımı',
    2 => 'Nesnelerin Kalıtımı',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Sınıflar ve Nesneler',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.visibility.php',
    1 => 'G&ouml;r&uuml;n&uuml;rl&uuml;k',
  ),
  'next' => 
  array (
    0 => 'language.oop5.paamayim-nekudotayim.php',
    1 => 'Etki Alanı &Ccedil;&ouml;z&uuml;n&uuml;rl&uuml;k İşleci (::)',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'language/oop5/inheritance.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.inheritance" class="sect1">
  <h2 class="title">Nesnelerin Kalıtımı</h2>
  <p class="para">
   Kalıtım iyi kurgulanmış bir programlama prensibidir ve PHP bu prensibi kendi
   nesne modelinde kullanır. Bu prensip çoğu sınıf ve nesnenin bir diğeri ile
   ilişkisini düzenler.
  </p>
  <p class="para">
   Örneğin, bir sınıf (<code class="literal">extend</code> ile) genişletildiğinde alt
   sınıf üst sınıftaki genel ve korunmuş yöntemlerin tümünü miras alır. Bir sınıf
   bu yöntemleri aynı isimdeki yöntemlerle geçersizleştirmedikçe bunlar özgün
   işlevselliklerini korur.
  </p>
  <p class="para">
   Bu, işlevselliği tanımlamak ve soyutlamak için ve paylaşılan işlevselliğin
   tamamını yeni baştan gerçeklemeksizin benzer nesnelerde ek işlevsellikleri
   gerçeklemek için kullanışlıdır.
  </p>
  <p class="para">
   Bir ebeveyn sınıfın private yöntemlerine bir çocuk sınıftan erişilemez.
   Sonuç olarak, normal miras alma kurallarına aldırmadan çocuk sınıfların bu
   private yöntemleri yeniden gerçeklemesi gerekebilir. PHP 8.0.0 öncesinde,
   private yöntemlere bunun yanında <code class="literal">final</code> ve
   <code class="literal">static</code> sınırlamaları da uygulanırdı. PHP 8.0.0 ve
   sonrasında zorunlu olan tek private yöntem kısıtlaması, <code class="literal">private
   final</code> kuruculardır, çünkü bu, yerleşik statik yöntemleri
   kullanırken kurucuyu &quot;devre dışı&quot; bırakmanın yaygın bir yoludur.
  </p>
  <p class="para">
   Yöntemlerin, özelliklerin ve sabitlerin
   <a href="language.oop5.visibility.php" class="link">görünürlüğü</a> gevşetilebilir,
   örn. <code class="literal">protected</code> bir yöntem <code class="literal">public</code> olarak
   imlenebilir; ancak sınırlandırılamaz, örneğin bir <code class="literal">public</code>
   özellik, <code class="literal">private</code> olarak imlenebilir.  Görünürlüğü
   kısıtlanabilen kurucular istisnadır, örn. bir <code class="literal">public</code>
   kurucu, bir çocuk sınıfta <code class="literal">private</code> olarak imlenebilir.
  </p>
  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <p class="para">
    Otomatik yükleme kullanılmadıkça, sınıflar kullanılmadan önce
    tanımlanmalıdır. Eğer bir sınıf diğerini genişletiyorsa ebeveyn sınıf çocuk
    sınıfın yapısı kurulmadan önce bildirilmiş olmalıdır. Bu kural diğer
    sınıfları ve arayüzleri miras alan tüm sınıflara uygulanır.
   </p>
  </p></blockquote>

  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <p class="para">
    Okunup yazılabilir bir özellik
    <a href="language.oop5.properties.php#language.oop5.properties.readonly-properties" class="link">salt-okunur
    özellik</a> vb. ile geçersiz kılınamaz.
    <div class="informalexample">
     <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 </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">int $prop</span><span style="color: #007700">;<br />}<br />class </span><span style="color: #0000BB">B </span><span style="color: #007700">extends </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Geçersiz: oku-yaz özellik salt-okunur yapılamaz<br />    </span><span style="color: #007700">public readonly </span><span style="color: #0000BB">int $prop</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>

  <div class="example" id="example-1">
   <p><strong>Örnek 1 Inheritance Example</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 />    public function </span><span style="color: #0000BB">printItem</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">)<br />    {<br />        echo </span><span style="color: #DD0000">'Foo: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$string </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">printPHP</span><span style="color: #007700">()<br />    {<br />        echo </span><span style="color: #DD0000">'PHP is great.' </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">Bar </span><span style="color: #007700">extends </span><span style="color: #0000BB">Foo<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">printItem</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">)<br />    {<br />        echo </span><span style="color: #DD0000">'Bar: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$string </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= new </span><span style="color: #0000BB">Bar</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">printItem</span><span style="color: #007700">(</span><span style="color: #DD0000">'baz'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Çıktısı: 'Foo: baz'<br /></span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">printPHP</span><span style="color: #007700">();       </span><span style="color: #FF8000">// Çıktısı: 'PHP is great'<br /></span><span style="color: #0000BB">$bar</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">printItem</span><span style="color: #007700">(</span><span style="color: #DD0000">'baz'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Çıktısı: 'Bar: baz'<br /></span><span style="color: #0000BB">$bar</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">printPHP</span><span style="color: #007700">();       </span><span style="color: #FF8000">// Çıktısı: 'PHP is great'<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

  </div>

  <div class="sect2" id="language.oop5.inheritance.internal-classes">
   <h3 class="title">Dahili Sınıflar ve Dönüş Türü Uyumluluğu</h3>

   <p class="para">
    PHP 8.1 öncesinde, dahili sınıfların vaya yöntemlerin çoğunda dönüş türü
    bildirimi yoktu ve bunları genişletirken dönüş türüne izin veriliyordu.
   </p>

   <p class="para">
    PHP 8.1.0 ve sonrasında, çoğu dahili yöntem dönüş türlerini &quot;geçici
    olarak&quot; bildirmeye başladı, bu durumda yöntemin dönüş türü, genişletilen
    ebeveyn ile uyumlu olmalıdır; aksi takdirde, bir kullanımdan kaldırma
    bildirimi çıktılanır. Açık bir dönüş türü bildiriminin olmayışı, ayrıca
    yapısal bir uyuşmazlık olarak kabul edilmekte ve dolayısıyla kullanımdan
    kaldırma bildirimiyle sonuçlanmaktadır.
   </p>

   <p class="para">
    PHP&#039;nin sürümler arası uyumluluk endişeleri nedeniyle geçersiz kılma
    yöntemi için dönüş türü bildirilemezse, kullanımdan kaldırma bildirimini
    sessizleştirmek için <span class="classname"><a href="class.returntypewillchange.php" class="classname">ReturnTypeWillChange</a></span> özniteliği
    eklenebilir.
   </p>

   <div class="example" id="example-2">
    <p><strong>Örnek 2 - Dönüş türünü bildirmeyen geçersiz kılma yöntemi</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">MyDateTime </span><span style="color: #007700">extends </span><span style="color: #0000BB">DateTime<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #0000BB">string $modifier</span><span style="color: #007700">) { return </span><span style="color: #0000BB">false</span><span style="color: #007700">; }<br />}<br /><br /></span><span style="color: #FF8000">// "Deprecated: Return type of MyDateTime::modify(string $modifier) should either be compatible with DateTime::modify(string $modifier): DateTime|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice" as of PHP 8.1.0<br />// Kullanımı önerilmiyor: MyDateTime::modify(string $modifier) için dönüş türü ya  DateTime::modify(string $modifier): DateTime|false ile uymlu olmalı ya da PHP 8.1.0 ve sonrasında uyarıyı susturmak için #[\ReturnTypeWillChange] özniteliği kullanılmış olmalıdır.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="example" id="example-3">
    <p><strong>Örnek 3 - Yanlış dönüş türü bildiren geçersiz kılma yöntemi</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">MyDateTime </span><span style="color: #007700">extends </span><span style="color: #0000BB">DateTime<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #0000BB">string $modifier</span><span style="color: #007700">): ?</span><span style="color: #0000BB">DateTime </span><span style="color: #007700">{ return </span><span style="color: #0000BB">null</span><span style="color: #007700">; }<br />}<br /><br /></span><span style="color: #FF8000">// "Deprecated: Return type of MyDateTime::modify(string $modifier): ?DateTime should either be compatible with DateTime::modify(string $modifier): DateTime|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice" as of PHP 8.1.0<br />// Kullanımı önerilmiyor: MyDateTime::modify(string $modifier): ?DateTime için dönüş türü ya DateTime::modify(string $modifier): DateTime|false ile uymlu olmalı ya da PHP 8.1.0 ve sonrasında uyarıyı susturmak için #[\ReturnTypeWillChange] özniteliği kullanılmış olmalıdır.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="example" id="example-4">
    <p><strong>Örnek 4 - Yanlış dönüş türü bildiren ama kullanımı önerilmiyor uyarısı vermeyen geçersiz kılma yöntemi</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">MyDateTime </span><span style="color: #007700">extends </span><span style="color: #0000BB">DateTime<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">/**<br />     * @return DateTime|false<br />     */<br />    </span><span style="color: #007700">#[</span><span style="color: #0000BB">\ReturnTypeWillChange</span><span style="color: #007700">]<br />    public function </span><span style="color: #0000BB">modify</span><span style="color: #007700">(</span><span style="color: #0000BB">string $modifier</span><span style="color: #007700">) { return </span><span style="color: #0000BB">false</span><span style="color: #007700">; }<br />}<br /><br /></span><span style="color: #FF8000">// Bir uyarı tetiklenmez<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

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