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

contributors($setup);

?>
<div id="language.oop5.interfaces" class="sect1">
  <h2 class="title">Nesne Arayüzleri</h2>
  <p class="para">
    Nesne arayüzleri, bir sınıfın gerçeklemesi gereken yöntemlerin
    belirtildiği kodu, bu yöntemlerin nasıl gerçekleneceğini tanımlamaksızın
    oluşturmanıza imkan sağlar. Arayüzler, sınıflar ve niteliklerle aynı isim
    alanını paylaşır, bu nedenle aynı adı kullanmayabilirler.
  </p>
  <p class="para">
    Arayüzler, sınıflardan farklı olarak <code class="literal">class</code> yerine
    <code class="literal">interface</code> anahtar sözcüğü kullanılarak ve içeriğinde
    hiçbir tanımlı yöntem olmaksızın tanımlanırlar.
  </p>
  <p class="para">
    Bir arayüzdeki tüm yöntemler, arayüzün doğası gereği <code class="code">public</code>
    olarak bildirilmelidir.
  </p>
  <p class="para">
   Uygulamada, arayüzler birbirlerini tamamlayan iki amaca hizmet eder::
  </p>
  <ul class="simplelist">
   <li>
    Geliştiricilerin, aynı arayüzü veya arayüzleri gerçekledikleri için
    birbirlerinin yerine kullanılabilecek farklı sınıflardan nesneler
    oluşturabilmelerini sağlamak. Böylece, kullanıldıkları kodda herhangi bir
    değişiklik yapılmasına gerek kalmadan bu farklı gerçeklenimler arasında
    geçiş yapılabilir. Yaygın bir örnek, çoklu veritabanı erişim hizmetleri,
    çoklu ödeme ağ geçitleri veya farklı önbelleğe alma stratejileridir.
   </li>
   <li>
    Nesnenin başka ne yapabileceğini veya nasıl uygulandığını umursamadan,
    bir işlev veya yöntemin arayüze uyan bir bağımsız değişkeni kabul etmesini ve
    üzerinde çalışmasını sağlamak. Bu arayüzler, davranışın önemini açıklamak
    için genellikle <code class="literal">Iterable</code> (Yinelenebilir),
    <code class="literal">Cacheable</code> (Önbelleğe Alınabilir),
    <code class="literal">Renderable</code> (Yorumlanabilir) vb. şeklinde adlandırılır.
   </li>
  </ul>
  <p class="para">
   Arayüzler, bu yöntemleri gerçeklemek için sınıfların gerçeklenmesini
   gerektiren <a href="language.oop5.magic.php" class="link">sihirli yöntemler</a>
   tanımlayabilir.
  </p>
  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <p class="para">
    Destekleniyor olsa bile, arayüzlere <a href="language.oop5.decon.php#language.oop5.decon.constructor" class="link">kurucuların</a> dahil
    edilmesi kesinlikle önerilmez. Bunu yapmak, arayüzü gerçekleyen nesnenin
    esnekliğini önemli ölçüde azaltır. Ek olarak, kurucular, tutarsız ve
    beklenmeyen davranışlara neden olabilecek miras alma kuralları tarafından
    zorlanmaz.
   </p>
  </p></blockquote>
  <div class="sect2" id="language.oop5.interfaces.implements">
   <h3 class="title"><code class="code">implements</code> işleci</h3>
   <p class="para">
    Bir arayüzü gerçeklemek için, <code class="literal">implements</code> işleci
    kullanılır. Arayüzdeki tüm yöntemler bir sınıf içersinde
    gerçeklenmelidir; aksi takdirde bir ölümcül hata alırsınız. Bir sınıfın,
    aralarına virgül koyarak birden fazla arayüzü gerçeklemesi sağlanabilir.
   </p>
   <div class="warning"><strong class="warning">Uyarı</strong>
    <p class="para">
     Bir arayüzü gerçekleyen bir sınıf, bağımsız değişkenleri için
     arayüzdekinden farklı bir ad kullanabilir. Bununla birlikte, PHP 8.0&#039;dan
     itibaren dil, <a href="functions.arguments.php#functions.named-arguments" class="link">isimli bağımsız
     değişkenleri</a> desteklemektedir, bu da çağrıcıların arayüzdeki
     bağımsız değişken adına güvenebileceği anlamına gelir. Bu nedenle,
     geliştiricilerin gerçeklenen arayüzle aynı bağımsız değişken adlarını
     kullanmaları şiddetle tavsiye edilir.
    </p>
   </div>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     Arayüzler, sınıflar gibi <a href="language.oop5.inheritance.php" class="link">
     extends</a> işleciyle genişletilebilir.
    </p>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     Bir sınıf bir arayüzü gerçeklerken, bunu <a href="language.oop5.basic.php#language.oop.lsp" class="link">bağımsız değişken adı ve sırası arayüzle
     uyumlu</a> yöntemler kullanarak yapmalıdır. Bir sınıf, aynı adlı
     yöntem bildiren birden çok arayüz gerçekleyebilir. Bu durumda gerçeklenim,
     tüm arayüzler için <a href="language.oop5.basic.php#language.oop.lsp" class="link">bağımsız değişken adı
     ve sırası uyumluk kurallarına</a> uygun olmalıdır. Böylece, <a href="language.oop5.variance.php" class="link">özgüllük</a> uygulanabilir olur.
     </p>
    </p></blockquote>
  </div>
  <div class="sect2" id="language.oop5.interfaces.constants">
   <h3 class="title">Sabitler</h3>
   <p class="para">
    Arayüzlerin sabitlerinin olması mümkündür. Arayüz sabitleri, tıpkı
    <a href="language.oop5.constants.php" class="link">sınıf sabitleri</a> gibi
    çalışır. PHP 8.1.0 öncesinde, kendilerini miras alan sınıflar veya
    arayüzler tarafından geçersiz kılınamazlardı.
   </p>
  </div>
  <div class="sect2" id="language.oop5.interfaces.examples">
   <h3 class="title">Örnekler</h3>
   <div class="example" id="language.oop5.interfaces.examples.ex1">
    <p><strong>Örnek 1 - Arayüz ö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: #FF8000">// 'Template' arayüzünü tanımlayalım<br /></span><span style="color: #007700">interface </span><span style="color: #0000BB">Template<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">setVariable</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">, </span><span style="color: #0000BB">$var</span><span style="color: #007700">);<br />    public function </span><span style="color: #0000BB">getHtml</span><span style="color: #007700">(</span><span style="color: #0000BB">$template</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #FF8000">// Arayüzü gerçekleyelim<br />// Bu çalışacaktır<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">WorkingTemplate </span><span style="color: #007700">implements </span><span style="color: #0000BB">Template<br /></span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$vars </span><span style="color: #007700">= [];<br /><br />    public function </span><span style="color: #0000BB">setVariable</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">, </span><span style="color: #0000BB">$var</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">$name</span><span style="color: #007700">] = </span><span style="color: #0000BB">$var</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">getHtml</span><span style="color: #007700">(</span><span style="color: #0000BB">$template</span><span style="color: #007700">)<br />    {<br />        foreach(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars </span><span style="color: #007700">as </span><span style="color: #0000BB">$name </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">$template </span><span style="color: #007700">= </span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">'{' </span><span style="color: #007700">. </span><span style="color: #0000BB">$name </span><span style="color: #007700">. </span><span style="color: #DD0000">'}'</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">, </span><span style="color: #0000BB">$template</span><span style="color: #007700">);<br />        }<br /><br />        return </span><span style="color: #0000BB">$template</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #FF8000">// Bu çalışmayacaktır<br />// Ölümcül hata: BadTemplate sınıfı 1 soyut yöntem içermektedir<br />// dolayısıyla soyut olarak tanımlanması gerekir (Template::getHtml)<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">BadTemplate </span><span style="color: #007700">implements </span><span style="color: #0000BB">Template<br /></span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$vars </span><span style="color: #007700">= [];<br /><br />    public function </span><span style="color: #0000BB">setVariable</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">, </span><span style="color: #0000BB">$var</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">$name</span><span style="color: #007700">] = </span><span style="color: #0000BB">$var</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="language.oop5.interfaces.examples.ex2">
    <p><strong>Örnek 2 - Genişletilebilir Arayüzler</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">interface </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br />}<br /><br />interface </span><span style="color: #0000BB">B </span><span style="color: #007700">extends </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">baz</span><span style="color: #007700">(</span><span style="color: #0000BB">Baz $baz</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #FF8000">// Bu çalışır<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">C </span><span style="color: #007700">implements </span><span style="color: #0000BB">B<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />    {<br />    }<br /><br />    public function </span><span style="color: #0000BB">baz</span><span style="color: #007700">(</span><span style="color: #0000BB">Baz $baz</span><span style="color: #007700">)<br />    {<br />    }<br />}<br /><br /></span><span style="color: #FF8000">// Bu çalışmaz, ölümcül hatayla sonuçlanır<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">D </span><span style="color: #007700">implements </span><span style="color: #0000BB">B<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />    {<br />    }<br /><br />    public function </span><span style="color: #0000BB">baz</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo $foo</span><span style="color: #007700">)<br />    {<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>
   <div class="example" id="language.oop5.interfaces.examples.variance.multiple.interfaces">
    <p><strong>Örnek 3 - Çoklu arayüzlerle özgüllük uyumluluğu</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">Foo </span><span style="color: #007700">{}<br />class </span><span style="color: #0000BB">Bar </span><span style="color: #007700">extends </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{}<br /><br />interface </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">myfunc</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo $arg</span><span style="color: #007700">): </span><span style="color: #0000BB">Foo</span><span style="color: #007700">;<br />}<br /><br />interface </span><span style="color: #0000BB">B </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">myfunc</span><span style="color: #007700">(</span><span style="color: #0000BB">Bar $arg</span><span style="color: #007700">): </span><span style="color: #0000BB">Bar</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">implements </span><span style="color: #0000BB">A</span><span style="color: #007700">, </span><span style="color: #0000BB">B<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">myfunc</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo $arg</span><span style="color: #007700">): </span><span style="color: #0000BB">Bar<br />    </span><span style="color: #007700">{<br />        return new </span><span style="color: #0000BB">Bar</span><span style="color: #007700">();<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>
   <div class="example" id="language.oop5.interfaces.examples.ex3">
    <p><strong>Örnek 4 - Çok sayıda arayüz oluşturma</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">interface </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br />}<br /><br />interface </span><span style="color: #0000BB">B<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br />}<br /><br />interface </span><span style="color: #0000BB">C </span><span style="color: #007700">extends </span><span style="color: #0000BB">A</span><span style="color: #007700">, </span><span style="color: #0000BB">B<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">baz</span><span style="color: #007700">();<br />}<br /><br />class </span><span style="color: #0000BB">D </span><span style="color: #007700">implements </span><span style="color: #0000BB">C<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />    {<br />    }<br /><br />    public function </span><span style="color: #0000BB">bar</span><span style="color: #007700">()<br />    {<br />    }<br /><br />    public function </span><span style="color: #0000BB">baz</span><span style="color: #007700">()<br />    {<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>
   <div class="example" id="language.oop5.interfaces.examples.ex4">
    <p><strong>Örnek 5 - Arayüzler ve sabitleri</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">interface </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">B </span><span style="color: #007700">= </span><span style="color: #DD0000">'Arayüz sabiti'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Şunu basar: Arayüz sabiti<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">A</span><span style="color: #007700">::</span><span style="color: #0000BB">B</span><span style="color: #007700">;<br /><br /><br />class </span><span style="color: #0000BB">B </span><span style="color: #007700">implements </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">B </span><span style="color: #007700">= </span><span style="color: #DD0000">'Sınıf sabiti'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Şunu basar: Sınıf sabiti<br />// PHP 8.1.0 öncesinde, sabitler geçersiz kılınamadığından bu çalışmazdı.<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">B</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>
   <div class="example" id="language.oop5.interfaces.examples.ex5">
    <p><strong>Örnek 6 - Soyut sınıflı arayüzler</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">interface </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">string $s</span><span style="color: #007700">): </span><span style="color: #0000BB">string</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(</span><span style="color: #0000BB">int $i</span><span style="color: #007700">): </span><span style="color: #0000BB">int</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Bir soyut sınıf bir arayüzün sadece bir bölümünü gerçekleyebilir.<br />// Kalanını soyut sınıfı genişleten sınıflar gerçeklemelidir.<br /></span><span style="color: #007700">abstract class </span><span style="color: #0000BB">B </span><span style="color: #007700">implements </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">string $s</span><span style="color: #007700">): </span><span style="color: #0000BB">string<br />    </span><span style="color: #007700">{<br />        return </span><span style="color: #0000BB">$s </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">C </span><span style="color: #007700">extends </span><span style="color: #0000BB">B<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(</span><span style="color: #0000BB">int $i</span><span style="color: #007700">): </span><span style="color: #0000BB">int<br />    </span><span style="color: #007700">{<br />        return </span><span style="color: #0000BB">$i </span><span style="color: #007700">* </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

   </div>
   <div class="example" id="language.oop5.interfaces.examples.ex6">
    <p><strong>Örnek 7 - Aynı anda genişletme ve gerçekleme</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">One<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">/* ... */<br /></span><span style="color: #007700">}<br /><br />interface </span><span style="color: #0000BB">Usable<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">/* ... */<br /></span><span style="color: #007700">}<br /><br />interface </span><span style="color: #0000BB">Updatable<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">/* ... */<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// Burada sözcük sırası önemli: 'extends' önce gelmeli.<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Two </span><span style="color: #007700">extends </span><span style="color: #0000BB">One </span><span style="color: #007700">implements </span><span style="color: #0000BB">Usable</span><span style="color: #007700">, </span><span style="color: #0000BB">Updatable<br /></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>
   <p class="para">
     Bir arayüz tür bildirimiyle belli bir nesnenin belli yöntemleri içermesini
     sağlayabilir. Ayrıca bakınız:
     <a href="language.operators.type.php" class="link">instanceof</a> işleci ve
     <a href="language.types.declarations.php" class="link">Tür Bildirimleri</a>.
   </p>
  </div>

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