<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.types.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'language.types.declarations.php',
    1 => 'T&uuml;r bildirimleri',
    2 => 'T&uuml;r bildirimleri',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'T&uuml;rler',
  ),
  'prev' => 
  array (
    0 => 'language.types.iterable.php',
    1 => 'iterable',
  ),
  'next' => 
  array (
    0 => 'language.types.type-juggling.php',
    1 => 'T&uuml;r D&ouml;n&uuml;ş&uuml;m&uuml;',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'language/types/declarations.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.declarations" class="sect1">
 <h2 class="title">Tür bildirimleri</h2>

 <p class="para">
  Tür bildirimleri işlev bağımsız değişkenlerine, dönüş değerlerine ve
  PHP 7.4.0 ve sonrasında sınıf özelliklerine eklenebilir. Çağrı sırasında
  değerin belirtilen türde olmasını gerektirir, aksi takdirde
  <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> oluşur.
 </p>

 <p class="para">
  <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> türü dışında PHP&#039;nin desteklediği her tür, kullanıcı
  bildirimi olarak kullanılabilir. Bu sayfa, farklı türlerin
  kullanılabilirliğine ilişkin bir değişiklik günlüğü ve bunların tür
  bildirimlerinde kullanımına ilişkin belgeleri içerir.
 </p>

 <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
  <p class="para">
   Bir sınıf, bir arayüz yöntemini gerçeklediğinde veya bir üst sınıf
   tarafından zaten tanımlanmış bir yöntemi yeniden gerçeklediğinde,
   gerçeklediği tanımla uyumlu olması gerekir. Bir yöntem,
   <a href="language.oop5.variance.php" class="link">özgüllük</a> kurallarına
   uyuyorsa uyumludur.
  </p>
 </p></blockquote>

 <div class="sect2">
  <h3 class="title">Sürüm Bilgisi</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Sürüm: </th>
      <th>Açıklama</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.3.0</td>
      <td>
       Sınıf, arayüz, nitelik ve sayılama sabit türleri için destek eklendi.
      </td>
     </tr>

     <tr>
      <td>8.2.0</td>
      <td>
       <abbr title="Disjunctive Normal Form">DNF</abbr> türleri desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>8.2.0</td>
      <td>
       <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> kendisi tür olanlardan biri olarak eklendi.
      </td>
     </tr>

     <tr>
      <td>8.2.0</td>
      <td>
       <span class="type"><a href="language.types.null.php" class="type null">null</a></span> ve <span class="type"><a href="language.types.singleton.php" class="type false">false</a></span> tek başlarına kullanılabilir oldu.
      </td>
     </tr>

     <tr>
      <td>8.1.0</td>
      <td>
       Kesişim türleri desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>8.1.0</td>
      <td>
       <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> dönüş türünde bir işlevden dönen değere başvuru
       artık önerilmiyor.
      </td>
     </tr>

     <tr>
      <td>8.1.0</td>
      <td>
       <span class="type"><a href="language.types.never.php" class="type never">never</a></span> dönüş türü desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> türü desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       <span class="type">static</span> dönüş türü desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       Birleşik türler desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       Sınıf özellik türü bildirim desteği eklendi.
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       <span class="type"><a href="language.types.object.php" class="type object">object</a></span> türü desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span> türü desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> türü desteklenmeye başlandı.
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       Null olabilen türler desteklenmeye başlandı.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.types.declarations.base">
  <h3 class="title">Temel türlerle ilgili kullanım bilgileri</h3>

  <p class="simpara">
   Temel türler, bu bölümde açıklanan bazı küçük yetersizlikler dışında
   basit şekilde davranır.
  </p>

  <div class="sect3" id="language.types.declarations.base.scalar">
   <h4 class="title">Sayıl türler</h4>
   <div class="warning"><strong class="warning">Uyarı</strong>
    <p class="para">
     Sayıl türler (<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>, <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, <span class="type"><a href="language.types.float.php" class="type float">float</a></span>,
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span>) için takma adlar desteklenmemekte, bunlar bir sınıf
     veya arayüz adı olarak ele alınmaktadır. Örneğin, tür bildirimi olarak
     <code class="literal">boolean</code>, değerin <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> türünden ziyade
     <code class="literal">boolean</code> isimli sınıfın veya arayüzün bir örneği
     olmasını gerektirir:
    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />    </span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">boolean $param</span><span style="color: #007700">) {}<br />    </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="para">
Yukarıdaki örneğin PHP 8 çıktısı:</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
Warning: &quot;boolean&quot; will be interpreted as a class name. Did you mean &quot;bool&quot;? Write &quot;\boolean&quot; to suppress this warning in /in/9YrUX on line 2
Fatal error: Uncaught TypeError: test(): Argument #1 ($param) must be of type boolean, bool given, called in - on line 3 and defined in -:2
Stack trace:
#0 -(3): test(true)
#1 {main}
  thrown in - on line 2
</pre></div>
     </div>
    </div>
   </div>
  </div>

  <div class="sect3" id="language.types.declarations.void">
   <h4 class="title">void</h4>
   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> dönüş türünde bir işlevden dönen değere başvuru
     çelişki sebebiyle PHP 8.1.0 ve sonrasında önerilmemektedir. Evvelce
     böyle bir çağrı şöyle bir <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> çıktılıyordu:
     <span class="computeroutput">Only variable references should be returned by reference</span>
     (Yalnızca değişkene atıflar atıf olarak döndürülebilir).

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function &amp;</span><span style="color: #0000BB">test</span><span style="color: #007700">(): </span><span style="color: #0000BB">void </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

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

  <div class="sect3" id="language.types.declarations.base.function">
   <h4 class="title">Çağrılabilir türler</h4>
   <p class="para">
    Bu türler sınıf özelliği türü olarak kullanılamaz.
   </p>

   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <span class="simpara">
     İşlev bildirimi olarak belirtilemez.
    </span>
   </p></blockquote>
  </div>

  <div class="sect3" id="language.types.declarations.references">
   <h4 class="title">Atıf olarak aktarılan bağımsız değişkenlerde tür bildirimi</h4>

   <p class="simpara">
    Atıf olarak aktarılan bir bağımsız değişkende tür bildirimi yapılmışsa
    değişkenin türü işlev dönerken değil, <em>yalnızca</em>
    çağrının başında işlev girdisi olarak sınanır. Yani işlev atıf yapılan
    değişkenin türünü değiştirebilir.
   </p>
   <div class="example" id="example-1">
    <p><strong>Örnek 1 - Atıf olarak aktarılan tür bildirimli bağımsız 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">function </span><span style="color: #0000BB">array_baz</span><span style="color: #007700">(array &amp;</span><span style="color: #0000BB">$param</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$param </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$var </span><span style="color: #007700">= [];<br /></span><span style="color: #0000BB">array_baz</span><span style="color: #007700">(</span><span style="color: #0000BB">$var</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$var</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">array_baz</span><span style="color: #007700">(</span><span style="color: #0000BB">$var</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
Yukarıdaki örnek şuna benzer bir çıktı üretir:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
int(1)
Fatal error: Uncaught TypeError: array_baz(): Argument #1 ($param) must be of type array, int given, called in - on line 9 and defined in -:2
Stack trace:
#0 -(9): array_baz(1)
#1 {main}
  thrown in - on line 2
</pre></div>
    </div>
   </div>
  </div>
 </div>

 <div class="sect2" id="language.types.declarations.composite">
  <h3 class="title">Birleşik türlerle ilgili kullanım bilgileri</h3>
  <p class="para">
   Birleşik tür bildirimleri ile ilgili birkaç kısıtlama vardır ve basit
   hataları önlemek için derleme sırasında gereksiz fazlalık denetimi
   yapılır.
  </p>

  <div class="caution"><strong class="caution">Dikkat</strong>
   <p class="simpara">
    PHP 8.2.0 öncesinde ve <abbr title="Disjunctive Normal Form">DNF</abbr> türler desteklenmeye
    başlandığında kesişim türlerini bileşik türlerle birleştirmek mümkün
    değildi.
   </p>
  </div>

  <div class="sect3" id="language.types.declarations.composite.union">
   <h4 class="title">Bileşik türler</h4>
   <div class="warning"><strong class="warning">Uyarı</strong>
    <p class="simpara">
     <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ve <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> tekil türlerini aynı bileşik tür altında bildirmek
     mümkün değildir. Bunun yerine <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> kullanılabilir.
    </p>
   </div>

   <div class="caution"><strong class="caution">Dikkat</strong>
    <p class="simpara">
     PHP 8.2.0 öncesinde, <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ve <span class="type"><a href="language.types.null.php" class="type null">null</a></span>
     tek başlarına kullanılamadığından yalnızca bu türlerden ibaret bir
     bileşik türe izin verilmezdi. İzin verilmeyen tür bildirimleri:
     <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, <code class="literal">false|null</code> ve
     <code class="literal">?false</code>.
    </p>
   </div>

   <div class="sect4" id="language.types.declarations.nullable">
    <h5 class="title">Null olabilen türde sözdizimsel nane</h5>

    <p class="para">
     Temel tür bildirimlerinden yalnızca biri, türün önüne bir soru imi
     (<code class="literal">?</code>) konularak null olabilir olarak imlenebilir.
     Bu bakımdan <code class="literal">?T</code> ve <code class="literal">T|null</code> aynıdır.
    </p>

    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <span class="simpara">
      Bu sözdizimi PHP 7.1.0 ve sonrasında desteklenmekte olup
      genelleştirilmiş bileşik tür desteğinden önce desteklenmekteydi.
     </span>
    </p></blockquote>

    <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
     <p class="para">
      <code class="literal">null</code> öntanımlı değer yapılarak null olabilir
      bağımsız değişkenler elde etmek de mümkündür. Bir alt sınıfta öntanımlı
      değer değiştirilirse, tür bildirimine <span class="type"><a href="language.types.null.php" class="type null">null</a></span> türün
      eklenmesini gerektireceğinden ve dolayısıyla tür uyumluluğunu
      bozacağından bu önerilmez.
     </p>
     <div class="example" id="example-2">
      <p><strong>Örnek 2 - Bağımsız değişkenlerin null olabilmesinin eski yolu</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">C </span><span style="color: #007700">{}<br />function </span><span style="color: #0000BB">f</span><span style="color: #007700">(</span><span style="color: #0000BB">C $c </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(new </span><span style="color: #0000BB">C</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
object(C)#1 (0) {
}
NULL
</pre></div>
      </div>
     </div>
    </p></blockquote>
   </div>
  </div>

  <div class="sect3" id="language.types.declarations.composite.redundant">
   <h4 class="title">Yinelenen ve gereksiz türler</h4>
   <p class="para">
    Birleşik tür bildirimlerindeki basit hataları yakalamak için, sınıf
    yüklemeden algılanabilen gereksiz türler, derleme zamanı hatasına neden
    olur. Bunlar:

    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       Adla çözümlenen her tür bir bildirimde yalnızca bir kez var olabilir.
       <code class="literal">int|string|INT</code> ve
       <code class="literal">Countable&amp;Traversable&amp;COUNTABLE</code>
       gibi türler hataya neden olur.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> kullanımı hataya yol açar.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">Birleşik türler için:</span>
      <ul class="itemizedlist">
       <li class="listitem">
        <span class="simpara">
         <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> türün yanına, <span class="type"><a href="language.types.singleton.php" class="type false">false</a></span> veya
         <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> eklenemez.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         <span class="type"><a href="language.types.object.php" class="type object">object</a></span> türün yanına, sınıf türleri eklenemez.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span> türün yanına, <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
         ve <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> eklenemez.
        </span>
       </li>
      </ul>
     </li>
     <li class="listitem">
      <span class="simpara">Kesişim türleri için:</span>
      <ul class="itemizedlist">
       <li class="listitem">
        <span class="simpara">
         Sınıf türünde olmayan türlerin kullanımı hataya yol açar.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         <span class="type">self</span>, <span class="type">parent</span> veya
         <span class="type">static</span> kullanımı hataya yol açar.
        </span>
       </li>
      </ul>
     </li>
     <li class="listitem">
      <span class="simpara"><abbr title="Disjunctive Normal Form">DNF</abbr> türleri için:</span>
      <ul class="itemizedlist">
       <li class="listitem">
        <span class="simpara">
         Genel bir türün yanına kısıtlayıcı bir türü eklemek gereksizdir.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         İki eşdeğer kesişim türü kullanımı.
        </span>
       </li>
      </ul>
     </li>
    </ul>
   </p>

   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <span class="simpara">
     Bu, türün &quot;en az&quot; olasılığını garanti etmez çünkü bunu yapmak,
     kullanılan tüm sınıf türlerinin yüklenmesini gerektirir.
    </span>
   </p></blockquote>

   <p class="para">
    Örneğin, <code class="literal">A</code> ve <code class="literal">B</code> sınıf takma
    adlarıysa, <code class="literal">A or B</code>&#039;ye indirgenebilse bile
    <code class="literal">A|B</code> uygun bir bileşik tür olarak kalır.
    Benzer şekilde, <code class="code">B extends A {}</code> ise, yalnızca A&#039;ya
    indirgenebilse bile <code class="literal">A|B</code> uygun bir bileşik türdür.

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">int</span><span style="color: #007700">|</span><span style="color: #0000BB">INT </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilmez<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">bool</span><span style="color: #007700">|</span><span style="color: #0000BB">false </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilmez<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">int</span><span style="color: #007700">&amp;</span><span style="color: #0000BB">Traversable </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilmez<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">self</span><span style="color: #007700">&amp;</span><span style="color: #0000BB">Traversable </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilmez<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">A </span><span style="color: #007700">as </span><span style="color: #0000BB">B</span><span style="color: #007700">;<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">A</span><span style="color: #007700">|</span><span style="color: #0000BB">B </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilmez ("use" ad çözünürlüğünün parçasıdır)<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">A</span><span style="color: #007700">&amp;</span><span style="color: #0000BB">B </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilmez ("use" ad çözünürlüğünün parçasıdır)<br /></span><span style="color: #0000BB">class_alias</span><span style="color: #007700">(</span><span style="color: #DD0000">'X'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Y'</span><span style="color: #007700">);<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">X</span><span style="color: #007700">|</span><span style="color: #0000BB">Y </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilir (gereksizlik yalnızca çalışma anında saptanabilir)<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(): </span><span style="color: #0000BB">X</span><span style="color: #007700">&amp;</span><span style="color: #0000BB">Y </span><span style="color: #007700">{} </span><span style="color: #FF8000">// izin verilir (gereksizlik yalnızca çalışma anında saptanabilir)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

 <div class="sect2" id="language.types.declarations.examples">
  <h3 class="title">Örnekler</h3>
  <div class="example" id="example-3">
   <p><strong>Örnek 3 - Temel sınıf türü bildirimi</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">C </span><span style="color: #007700">{}<br />class </span><span style="color: #0000BB">D </span><span style="color: #007700">extends </span><span style="color: #0000BB">C </span><span style="color: #007700">{}<br /></span><span style="color: #FF8000">// C'yi genişletmiyor.<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">E </span><span style="color: #007700">{}<br />function </span><span style="color: #0000BB">f</span><span style="color: #007700">(</span><span style="color: #0000BB">C $c</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">).</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(new </span><span style="color: #0000BB">C</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(new </span><span style="color: #0000BB">D</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(new </span><span style="color: #0000BB">E</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 PHP 8 çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
C
D
Fatal error: Uncaught TypeError: f(): Argument #1 ($c) must be of type C, E given, called in /in/gLonb on line 14 and defined in /in/gLonb:8
Stack trace:
#0 -(14): f(Object(E))
#1 {main}
  thrown in - on line 8
</pre></div>
   </div>
  </div>

  <div class="example" id="example-4">
   <p><strong>Örnek 4 - Temel arayüz türü bildirimi</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">I </span><span style="color: #007700">{ public function </span><span style="color: #0000BB">f</span><span style="color: #007700">(); }<br />class </span><span style="color: #0000BB">C </span><span style="color: #007700">implements </span><span style="color: #0000BB">I </span><span style="color: #007700">{ public function </span><span style="color: #0000BB">f</span><span style="color: #007700">() {} }<br /></span><span style="color: #FF8000">// I'yi gerçeklemiyor.<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">E </span><span style="color: #007700">{}<br />function </span><span style="color: #0000BB">f</span><span style="color: #007700">(</span><span style="color: #0000BB">I $i</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$i</span><span style="color: #007700">).</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(new </span><span style="color: #0000BB">C</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(new </span><span style="color: #0000BB">E</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 PHP 8 çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
C
Fatal error: Uncaught TypeError: f(): Argument #1 ($i) must be of type I, E given, called in - on line 13 and defined in -:8
Stack trace:
#0 -(13): f(Object(E))
#1 {main}
  thrown in - on line 8
</pre></div>
   </div>
  </div>

  <div class="example" id="example-5">
   <p><strong>Örnek 5 - Temel dönüş türü bildirimi</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">function </span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">): </span><span style="color: #0000BB">float </span><span style="color: #007700">{<br />    return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /></span><span style="color: #FF8000">// dikkat: float dönecek<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</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>
float(3)
</pre></div>
   </div>
  </div>

  <div class="example" id="example-6">
   <p><strong>Örnek 6 - Bir nesne döndürmek</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">C </span><span style="color: #007700">{}<br />function </span><span style="color: #0000BB">getC</span><span style="color: #007700">(): </span><span style="color: #0000BB">C </span><span style="color: #007700">{<br />    return new </span><span style="color: #0000BB">C</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">getC</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
object(C)#1 (0) {
}
</pre></div>
   </div>
  </div>

  <div class="example" id="example-7">
   <p><strong>Örnek 7 - Null olabilen bağımsız değişken bildirimi</strong></p>
   <div class="example-contents">
    <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">C </span><span style="color: #007700">{}<br />function </span><span style="color: #0000BB">f</span><span style="color: #007700">(?</span><span style="color: #0000BB">C $c</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(new </span><span style="color: #0000BB">C</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">f</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
    <div class="cdata"><pre>
object(C)#1 (0) {
}
NULL
</pre></div>
   </div>
  </div>

  <div class="example" id="example-8">
   <p><strong>Örnek 8 - Null olabilen dönüş türü bildirimi</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">function </span><span style="color: #0000BB">get_item</span><span style="color: #007700">(): ?</span><span style="color: #0000BB">string </span><span style="color: #007700">{<br />    if (isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'item'</span><span style="color: #007700">])) {<br />        return </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'item'</span><span style="color: #007700">];<br />    } else {<br />        return </span><span style="color: #0000BB">null</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.types.declarations.strict">
  <h3 class="title">Katı kodlama</h3>

  <p class="para">
   PHP öntanımlı olarak, yanlış türdeki değerleri mümkün olduğunca beklenen
   sayıl türe zorlar. Örneğin, bir dizge aktarılması gereken bir bağımsız
   değişkene tamsayı bir değer aktarılırsa, işlev <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> değil
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span> türünde bir değişken alır.
  </p>

  <p class="para">
   Katı kipi her dosya için ayrı ayrı etkinleştirmek mümkündür. Katı kipte,
   yalnızca tür bildirimine tam olarak karşılık gelen değer kabul edilir,
   aksi takdirde bir <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> oluşur. Bu kuralın tek
   istisnası, <span class="type"><a href="language.types.float.php" class="type float">float</a></span> tür bildirimine rağmen <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   türünde değer aktarmaktır.
  </p>

  <div class="warning"><strong class="warning">Uyarı</strong>
   <p class="simpara">
    Dahili işlevler içinden yapılan işlev çağrıları,
    <code class="literal">strict_types</code> bildiriminden etkilenmez.
   </p>
  </div>

  <p class="para">
   Katı kipi etkinleştirmek için, <code class="literal">strict_types</code> bildirimi
   <a href="control-structures.declare.php" class="link"><code class="literal">declare</code></a> deyiminde kullanılır:
  </p>

  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <p class="para">
    Katı kodlama, katı kodlamanın etkinleştirildiği dosya içindeki işlev
    tanımlarına değil, işlev çağrılarına uygulanır. Katı kodlama etkin
    olmayan bir dosyadan, katı kodlamanın etkinleştirildiği dosya içinde
    tanımlanmış bir işleve çağrı yapılırsa, çağrıyı yapanın tercihine
    (zorlayıcı kodlama) saygı gösterilecek ve değer zorlanacaktır.
   </p>
  </p></blockquote>

  <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
   <p class="para">
    Katı kodlama yalnızca sayıl tür bildirimleri için tanımlanmıştır.
   </p>
  </p></blockquote>

  <div class="example" id="example-9">
   <p><strong>Örnek 9 - Bağımsız değişken değerlerinde katı kodlama</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">declare(</span><span style="color: #0000BB">strict_types</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />function </span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">int $a</span><span style="color: #007700">, </span><span style="color: #0000BB">int $b</span><span style="color: #007700">) {<br />    return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1.5</span><span style="color: #007700">, </span><span style="color: #0000BB">2.5</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 PHP 8 çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
int(3)
Fatal error: Uncaught TypeError: sum(): Argument #1 ($a) must be of type int, float given, called in - on line 9 and defined in -:4
Stack trace:
#0 -(9): sum(1.5, 2.5)
#1 {main}
  thrown in - on line 4
</pre></div>
   </div>
  </div>

  <div class="example" id="example-10">
   <p><strong>Örnek 10 - Bağımsız değişken değerlerinde zorlayıcı kodlama</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">function </span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">int $a</span><span style="color: #007700">, </span><span style="color: #0000BB">int $b</span><span style="color: #007700">) {<br />    return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">));<br /></span><span style="color: #FF8000">// Değerler tamsayıya zorlanır. Çıktıya dikkat!<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1.5</span><span style="color: #007700">, </span><span style="color: #0000BB">2.5</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
int(3)
int(3)
</pre></div>
   </div>
  </div>

  <div class="example" id="example-11">
   <p><strong>Örnek 11 - Dönüş değerlerinde katı kodlama</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">declare(</span><span style="color: #0000BB">strict_types</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />function </span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">): </span><span style="color: #0000BB">int </span><span style="color: #007700">{<br />    return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2.5</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
Yukarıdaki örneğin çıktısı:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
int(3)
Fatal error: Uncaught TypeError: sum(): Return value must be of type int, float returned in -:5
Stack trace:
#0 -(9): sum(1, 2.5)
#1 {main}
  thrown in - on line 5
</pre></div>
   </div>
  </div>
  <div class="example" id="example-12">
   <p><strong>Örnek 12 - Sınıf özellik türü bildirimi</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">User </span><span style="color: #007700">{<br />    public static </span><span style="color: #0000BB">string $foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /><br />    public </span><span style="color: #0000BB">int $id</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">string $username</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 $id</span><span style="color: #007700">, </span><span style="color: #0000BB">string $username</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">username </span><span style="color: #007700">= </span><span style="color: #0000BB">$username</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

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