<?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.traits.php',
    1 => 'Nitelikler',
    2 => 'Nitelikler',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Sınıflar ve Nesneler',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.interfaces.php',
    1 => 'Nesne Aray&uuml;zleri',
  ),
  'next' => 
  array (
    0 => 'language.oop5.anonymous.php',
    1 => 'Anonim Sınıflar',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'language/oop5/traits.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.traits" class="sect1">
  <h2 class="title">Nitelikler</h2>
  <p class="para">
   PHP tekrar tekrar kullanılabilen bir yöntem kodu olarak
   <code class="literal">trait</code> ismini kullanarak nitelikleri tanımlamıştır.
  </p>
  <p class="para">
   Nitelikler, PHP gibi tek kalıtımlı dillerde kodun yeniden
   kullanımını sağlayan bir mekanizmadır. Yöntem kümelerini farklı sınıf
   hiyerarşilerinde yaşayan birçok bağımsız sınıfın içinde özgürce yeniden
   kullanımını mümkün kılarak tek kalıtımlı dillerdeki bazı sınırlamaları
   azaltmak için tasarlanmıştır. Sınıfların ve niteliklerin
   birleşiminden doğan anlamlılık, karmaşıklığı azaltan ve çoklu kalıtım ve iç
   içeliklerle ilgili bilinen sorunlardan kaçınan bir yol izlenerek
   tanımlanmıştır.
  </p>
  <p class="para">
   Nitelikler sınıflara benzemekle birlikte işlevselliği gruplamak için
   daha bir ince elenip sık dokunarak tasarlanmıştır. Bir niteliği
   kendi içinde örneklemek mümkün değildir. Geleneksel kalıtıma bir ekleme olup
   yatay davranış düzenini, yani kalıtım gerekmeksizin sınıf üyesi olmayı mümkün
   kılar.
  </p>

  <div class="example" id="language.oop5.traits.basicexample">
    <p><strong>Örnek 1 - Nitelik ö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">trait </span><span style="color: #0000BB">ezcReflectionReturnInfo </span><span style="color: #007700">{<br />    function </span><span style="color: #0000BB">getReturnType</span><span style="color: #007700">() { </span><span style="color: #FF8000">/*1*/ </span><span style="color: #007700">}<br />    function </span><span style="color: #0000BB">getReturnDescription</span><span style="color: #007700">() { </span><span style="color: #FF8000">/*2*/ </span><span style="color: #007700">}<br />}<br /><br />class </span><span style="color: #0000BB">ezcReflectionMethod </span><span style="color: #007700">extends </span><span style="color: #0000BB">ReflectionMethod </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">ezcReflectionReturnInfo</span><span style="color: #007700">;<br />    </span><span style="color: #FF8000">/* ... */<br /></span><span style="color: #007700">}<br /><br />class </span><span style="color: #0000BB">ezcReflectionFunction </span><span style="color: #007700">extends </span><span style="color: #0000BB">ReflectionFunction </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">ezcReflectionReturnInfo</span><span style="color: #007700">;<br />    </span><span style="color: #FF8000">/* ... */<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  <div class="sect2" id="language.oop5.traits.precedence">
   <h3 class="title">Öncelik sırası</h3>
   <p class="para">
    Bir nitelikle gelen bir üye, bir temel sınıftan miras alınan bir
    üyenin yerine geçerse onu geçersiz kılar; sınıfın kendi üyeleri de
    niteliğin yerine geçerse onu geçersiz kılar.
   </p>
   <div class="example" id="language.oop5.traits.precedence.examples.ex1">
    <p><strong>Örnek 2 - Öncelik sırası örneği</strong></p>
    <div class="example-contents"><p>
     Temel sınıftan miras alınan yöntem, DünyaDe niteliğinden MerhabaDünyam
     içine yerleştirilen üye tarafından geçersizleştirilmektedir. MerhabaDünyam
     sınıfı içinde tanımlı yöntemler için de davranış aynıdır. Öncelik sırası
     şöyledir: Temel sınıftan alınan yöntemleri geçersizleştiren nitelikleri
     geçerli sınıfın yöntemleri geçersizleştirir.
    </p></div>
    <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">Temel </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Merhaba '</span><span style="color: #007700">;<br />    }<br />}<br /><br />trait </span><span style="color: #0000BB">DünyaDe </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">() {<br />        </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">();<br />        echo </span><span style="color: #DD0000">'Dünya!'</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">MerhabaDünyam </span><span style="color: #007700">extends </span><span style="color: #0000BB">Temel </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">DünyaDe</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">MerhabaDünyam</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">merhabaDe</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 Dünya!
</pre></div>
    </div>
   </div>
   <div class="example" id="language.oop5.traits.precedence.examples.ex2">
    <p><strong>Örnek 3 - Bir diğer öncelik sırası ö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">trait </span><span style="color: #0000BB">MerhabaDünya </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Merhaba Dünya!'</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">DünyaYetmez </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">MerhabaDünya</span><span style="color: #007700">;<br />    public function </span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Merhaba Evren!'</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">DünyaYetmez</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">merhabaDe</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 Evren!
</pre></div>
    </div>
   </div>
  </div>

  <div class="sect2" id="language.oop5.traits.multiple">
   <h3 class="title">Çoklu Nitelikler</h3>
   <p class="para">
    Çok sayıda nitelik bir sınıfın içine <code class="literal">use</code> deyiminde
    virgüllerle ayrılarak yerleştirilebilir.
   </p>
   <div class="example" id="language.oop5.traits.multiple.ex1">
    <p><strong>Örnek 4 - Çok sayıda niteliğin 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">trait </span><span style="color: #0000BB">Merhaba </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Merhaba '</span><span style="color: #007700">;<br />    }<br />}<br /><br />trait </span><span style="color: #0000BB">Dünya </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">dünyaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Dünya'</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">MerhabaDünyam </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">Merhaba</span><span style="color: #007700">, </span><span style="color: #0000BB">Dünya</span><span style="color: #007700">;<br />    public function </span><span style="color: #0000BB">Bağır</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">MerhabaDünyam</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dünyaDe</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">Bağır</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 Dünya!
</pre></div>
    </div>
   </div>
  </div>

  <div class="sect2" id="language.oop5.traits.conflict">
   <h3 class="title">Çelişki Çözümleme</h3>
   <p class="para">
    Bir yönteme aynı isme sahip iki nitelik yerleştirilirse çelişki açıkça
    çözümlenmediği takdirde ölümcül bir hataya sebep olur.
   </p>
   <p class="para">
    Aynı sınıfta kullanılan nitelikler arasındaki adlandırma
    çakışmasını çözümlemek için <code class="literal">insteadof</code> işleci birini
    seçmek amacıyla kullanılabilir.
   </p>
   <p class="para">
    Bu işlem yöntemi dışlamayı sağladığından <code class="literal">as</code> işleci
    yönteme takma ad eklemek için kullanılabilir. <code class="literal">as</code>
    işlecinin yöntemin ismini değiştirmediğini ve diğer
    yöntemleri etkilemediğini unutmayın.
   </p>
   <div class="example" id="language.oop5.traits.conflict.ex1">
    <p><strong>Örnek 5 - Çelişki çözümleme örneği</strong></p>
    <div class="example-contents"><p>
      Bu örnekte, Talker A ve B niteliklerini kullanıyor. A ve B çakışan
      yöntemlere sahip olduğundan B niteliğinden smallTalk ve A niteliğinden
      bigTalk kullanılmaktadır.
    </p></div>
    <div class="example-contents"><p>
      Aliased_Talker ise B&#039;nin bigTalk gerçeklenimini <code class="literal">talk</code>
      diye bir takma ad altında kullanmak için <code class="literal">as</code> işlecinden
      yararlanmaktadır.
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">trait </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">smallTalk</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'a'</span><span style="color: #007700">;<br />    }<br />    public function </span><span style="color: #0000BB">bigTalk</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'A'</span><span style="color: #007700">;<br />    }<br />}<br /><br />trait </span><span style="color: #0000BB">B </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">smallTalk</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'b'</span><span style="color: #007700">;<br />    }<br />    public function </span><span style="color: #0000BB">bigTalk</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'B'</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">Talker </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">A</span><span style="color: #007700">, </span><span style="color: #0000BB">B </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">smallTalk </span><span style="color: #007700">insteadof </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">A</span><span style="color: #007700">::</span><span style="color: #0000BB">bigTalk </span><span style="color: #007700">insteadof </span><span style="color: #0000BB">B</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">Aliased_Talker </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">A</span><span style="color: #007700">, </span><span style="color: #0000BB">B </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">smallTalk </span><span style="color: #007700">insteadof </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">A</span><span style="color: #007700">::</span><span style="color: #0000BB">bigTalk </span><span style="color: #007700">insteadof </span><span style="color: #0000BB">B</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">bigTalk </span><span style="color: #007700">as </span><span style="color: #0000BB">talk</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="sect2" id="language.oop5.traits.visibility">
   <h3 class="title">Yöntem Görünürlüğünü Değiştirme</h3>
   <p class="para">
    Sergileyen sınıf içinde yöntemin görünürlüğünü ayarlamak için
    <code class="literal">as</code> sözdizimi kullanılabilir.
   </p>
   <div class="example" id="language.oop5.traits.visibility.ex1">
    <p><strong>Örnek 6 - Yöntem görünürlüğünü değiştirme ö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">trait </span><span style="color: #0000BB">MerhabaDünya </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Merhaba Dünya!'</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #FF8000">// merhabaDe görünürlüğünü değiştir<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Sınıfım1 </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">MerhabaDünya </span><span style="color: #007700">{ </span><span style="color: #0000BB">merhabaDe </span><span style="color: #007700">as protected; }<br />}<br /><br /></span><span style="color: #FF8000">// Görünürlüğü ve ismi değişmiş yöntem<br />// merhabaDe görünürlüğü değişmedi<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Sınıfım2 </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">MerhabaDünya </span><span style="color: #007700">{ </span><span style="color: #0000BB">merhabaDe </span><span style="color: #007700">as private </span><span style="color: #0000BB">özelMerhabam</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.traits.composition">
   <h3 class="title">Niteliklerden oluşturulmuş Nitelikler</h3>
   <p class="para">
    Sınıflarda olduğu gibi nitelikler de bir diğerinin içinde kullanılabilir.
    Birden fazla nitelik kısmen veya tamamen bir diğer niteliğin içinde
    kullanılabilir.
   </p>
   <div class="example" id="language.oop5.traits.composition.ex1">
    <p><strong>Örnek 7 - Niteliklerden nitelik oluşturma ö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">trait </span><span style="color: #0000BB">Merhaba </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Merhaba '</span><span style="color: #007700">;<br />    }<br />}<br /><br />trait </span><span style="color: #0000BB">Dünya </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">dünyaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Dünya!'</span><span style="color: #007700">;<br />    }<br />}<br /><br />trait </span><span style="color: #0000BB">MerhabaDünya </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">Merhaba</span><span style="color: #007700">, </span><span style="color: #0000BB">Dünya</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">MerhabaDünyam </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">MerhabaDünya</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">MerhabaDünyam</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">merhabaDe</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dünyaDe</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 Dünya!
</pre></div>
    </div>
   </div>
  </div>

  <div class="sect2" id="language.oop5.traits.abstract">
   <h3 class="title">Soyut Nitelik Yöntemleri</h3>
   <p class="para">
    Nitelikler, kullanılacakları sınıfa yüklenmelerini sağlamak amacıyla
    soyut yöntemlerin kullanımını destekler. Public, protected ve private
    yöntemler desteklenir. PHP 8.0.0 öncesinde, sadece public ve protected
    soyut yöntemler destekleniyordu.
   </p>
   <div class="caution"><strong class="caution">Dikkat</strong>
    <p class="simpara">
     PHP 8.0.0 ve sonrasında, somut sınıfın
     <a href="language.oop5.basic.php#language.oop.lsp" class="link">imza uyumluluk kurallarına</a>
     uygun olması gerekir. Evvelce imzası farklı olabiliyordu.
    </p>
   </div>
   <div class="example" id="language.oop5.traits.abstract.ex1">
    <p><strong>Örnek 8 - Gereksinimlerin soyut yöntemlerle ifadesi</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">trait </span><span style="color: #0000BB">Merhaba </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">merhabaDünyaDe</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">'Merhaba'</span><span style="color: #007700">.</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dünyaGetir</span><span style="color: #007700">();<br />    }<br />    abstract public function </span><span style="color: #0000BB">dünyaGetir</span><span style="color: #007700">();<br />}<br /><br />class </span><span style="color: #0000BB">MerhabaDünyam </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$dünya</span><span style="color: #007700">;<br />    use </span><span style="color: #0000BB">Merhaba</span><span style="color: #007700">;<br />    public function </span><span style="color: #0000BB">dünyaGetir</span><span style="color: #007700">() {<br />        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dünya</span><span style="color: #007700">;<br />    }<br />    public function </span><span style="color: #0000BB">dünyaAta</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">dünya </span><span style="color: #007700">= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="sect2" id="language.oop5.traits.static">
   <h3 class="title">Statik Nitelik Yöntemleri</h3>
   <p class="para">
    Nitelikler statik değişkenleri, statik yöntemleri ve statik özellikleri
    tanımlayabilir.
   </p>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     PHP 8.1.0 itibariyle, bir nitelik üzerinde doğrudan statik bir özelliğe erişim
     veya statik yöntem çağrısı önerilmemektedir. Statik yöntem ve özelliklere sadece
     niteliği kullanan sınıftan erişilmelidir.
    </p>
   </p></blockquote>
   <div class="example" id="language.oop5.traits.static.ex1">
    <p><strong>Örnek 9 - Statik Değişkenler</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">trait </span><span style="color: #0000BB">Sayaç </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">arttır</span><span style="color: #007700">() {<br />        static </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">$c </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />        echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$c</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">C1 </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">Sayaç</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">C2 </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">Sayaç</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">C1</span><span style="color: #007700">(); </span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">arttır</span><span style="color: #007700">(); </span><span style="color: #FF8000">// 1 basar<br /></span><span style="color: #0000BB">$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">C2</span><span style="color: #007700">(); </span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">arttır</span><span style="color: #007700">(); </span><span style="color: #FF8000">// 1 basar<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="language.oop5.traits.static.ex2">
    <p><strong>Örnek 10 - Statik Yöntemler</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">trait </span><span style="color: #0000BB">StatikÖrnek </span><span style="color: #007700">{<br />    public static function </span><span style="color: #0000BB">bişeyYap</span><span style="color: #007700">() {<br />        return </span><span style="color: #DD0000">'Bir şey yapıyorum'</span><span style="color: #007700">;<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">Örnek </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">StatikÖrnek</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">Örnek</span><span style="color: #007700">::</span><span style="color: #0000BB">bişeyYap</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="language.oop5.traits.static.ex3">
    <p><strong>Örnek 11 - Statik Özellikler</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">trait </span><span style="color: #0000BB">StatikÖrnek </span><span style="color: #007700">{<br />    public static </span><span style="color: #0000BB">$statik </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">Örnek </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">StatikÖrnek</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">Örnek</span><span style="color: #007700">::</span><span style="color: #0000BB">$statik</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="sect2" id="language.oop5.traits.properties">
   <h3 class="title">Özellikler</h3>
   <p class="para">
    Nitelikler özellik tanımlayabilir.
   </p>
   <div class="example" id="language.oop5.traits.properties.example">
    <p><strong>Örnek 12 - Özellik tanımlama ö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">trait </span><span style="color: #0000BB">NitelikliÖzellik </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$x </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">ÖzellikÖrneği </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">NitelikliÖzellik</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$örnek </span><span style="color: #007700">= new </span><span style="color: #0000BB">ÖzellikÖrneği</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">örnek</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">x</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <p class="para">
    Bir nitelik bir özellik tanımlarsa sınıf aynı isimde bir özelliği uyumlu
    (aynı görünürlük ve tür, salt okunur değiştirici ve ilk değer) olmadıkça
    tanımlayamaz, aksi takdirde ölümcül hata oluşur.
   </p>
   <div class="example" id="language.oop5.traits.properties.conflicts">
    <p><strong>Örnek 13 - Çelişki yaratma ö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">trait </span><span style="color: #0000BB">ÖzellikliNitelik </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$aynı </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$farklı1 </span><span style="color: #007700">= </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">bool $farklı2</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">bool $farklı3</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">ÖzellikliÖrnek </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">ÖzellikliNitelik</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$aynı </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$farklı1 </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">; </span><span style="color: #FF8000">// ölümcül hata<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $farklı2</span><span style="color: #007700">; </span><span style="color: #FF8000">// ölümcül hata<br />    </span><span style="color: #007700">readonly protected </span><span style="color: #0000BB">bool $farklı3</span><span style="color: #007700">; </span><span style="color: #FF8000">// ölümcül hata<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

 <div class="sect2" id="language.oop5.traits.constants">
  <h3 class="title">Sabitler</h3>
  <p class="para">
   PHP 8.2.0 itibariyle nitelikler sabitleri de tanımlayabilmektedir.
  </p>
  <div class="example" id="language.oop5.traits.constants.example">
   <p><strong>Örnek 14 - Sabitlerin Tanımlanması</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">trait </span><span style="color: #0000BB">SabitliNitelik </span><span style="color: #007700">{<br />    public const </span><span style="color: #0000BB">FLAG_MUTABLE </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    final public const </span><span style="color: #0000BB">FLAG_IMMUTABLE </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">SabitliÖrnek </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">SabitliNitelik</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$örnek </span><span style="color: #007700">= new </span><span style="color: #0000BB">SabitliÖrnek</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$örnek</span><span style="color: #007700">::</span><span style="color: #0000BB">FLAG_MUTABLE</span><span style="color: #007700">; </span><span style="color: #FF8000">// 1<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <p class="para">
   Bir niteliğin tanımladığı sabiti bir sınıf uyumluluk kurallarına (aynı
   görünürlük, aynı ilk değer ve aynı sonuç) uymadan aynı isimle tekrar
   tanımlayamaz, aksi takdirde ölümcül hata oluşur.
  </p>
  <div class="example" id="language.oop5.traits.constants.conflicts">
   <p><strong>Örnek 15 - Çelişki Çözümleme</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">trait </span><span style="color: #0000BB">SabitliNitelik </span><span style="color: #007700">{<br />    public const </span><span style="color: #0000BB">FLAG_MUTABLE </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    final public const </span><span style="color: #0000BB">FLAG_IMMUTABLE </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">SabitliÖrnek </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">SabitliNitelik</span><span style="color: #007700">;<br />    public const </span><span style="color: #0000BB">FLAG_IMMUTABLE </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// Ölümcül hata<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

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