<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.attributes.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'language.attributes.overview.php',
    1 => '&Ouml;zniteliklere giriş',
    2 => '&Ouml;zniteliklere giriş',
  ),
  'up' => 
  array (
    0 => 'language.attributes.php',
    1 => '&Ouml;znitelikler',
  ),
  'prev' => 
  array (
    0 => 'language.attributes.php',
    1 => '&Ouml;znitelikler',
  ),
  'next' => 
  array (
    0 => 'language.attributes.syntax.php',
    1 => '&Ouml;znitelik S&ouml;zdizimi',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'language/attributes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.attributes.overview" class="sect1">
   <h2 class="title">Özniteliklere giriş</h2>
   <p class="verinfo">(PHP 8)</p>

   <p class="para">
    Öznitelikler, koddaki bildirimlerin üzerine yapılandırılmış, makine
    tarafından okunabilir meta veri bilgilerinin eklenmesini sağlar:
    Sınıflar, yöntemler, işlevler, bağımsız değişkenler, özellikler ve sınıf
    sabitleri bir özniteliğin hedefi olabilir. Özniteliklerle tanımlanan
    meta veriler daha sonra <a href="book.reflection.php" class="link">Yansıtma
    Arayüzleri</a> kullanılarak çalışma anında incelenebilir.
    Bu nedenle öznitelikler, doğrudan koda gömülmüş bir yapılandırma dili
    olarak düşünülebilir.
   </p>

   <p class="para">
    Özniteliklerle, bir özelliğin kapsamlı gerçeklenimi ile bir
    uygulamadaki somut kullanımı ayrıştırılabilir. Bir bakıma arayüzler,
    gerçeklenimleri ile karşılaştırılabilir. Ancak arayüzlerin ve
    gerçeklenimlerin kodla ilgili olduğu yerlerde öznitelikler, ek bilgi
    ve yapılandırmaya küçük açıklamalar eklemekle ilgilidir. Arayüzler
    sınıflarla gerçeklenebilir, ancak öznitelikler ek olarak yöntemler,
    işlevler, bağımsız değişkenler, özellikler ve sınıf sabitleri üzerinde de
    bildirilebilir. Bu nedenle arayüzlerden daha esnektir.
   </p>

   <p class="para">
    Öznitelik kullanımına basit bir örnek, öznitelikleri kullanmak için isteğe
    bağlı yöntemlere sahip bir arayüzü dönüştürmektir.
    <code class="literal">ActionHandler</code> arayüzünün bir uygulamadaki bir işlemi
    yerine getirdiğini ve bu arayüzün bazı gerçeklenimlerinin ilklendirilmesi
    gerekirken diğerlerine bunun gerekmediğini varsayalım.
    <code class="literal">ActionHandler</code> arayüzünü gerçekleyen tüm sınıfların
    <code class="literal">setUp()</code> yöntemini gerçeklemesi gerekirken, bunu
    yapmak yerine, onun yerini alabilecek bir öznitelik kullanılabilir.
    Bu yaklaşımın tek yararı, öznitelliğin birkaç kez kullanabilmesidir.
   </p>

   <div class="example" id="example-1">
    <p><strong>Örnek 1 - Bir arayüzün isteğe bağlı yöntemlerini özniteliklerle gerçeklemek
    </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">ActionHandler<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br />}<br /><br />#[</span><span style="color: #0000BB">Attribute</span><span style="color: #007700">]<br />class </span><span style="color: #0000BB">SetUp </span><span style="color: #007700">{}<br /><br />class </span><span style="color: #0000BB">CopyFile </span><span style="color: #007700">implements </span><span style="color: #0000BB">ActionHandler<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">string $fileName</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">string $targetDirectory</span><span style="color: #007700">;<br /><br />    #[</span><span style="color: #0000BB">SetUp</span><span style="color: #007700">]<br />    public function </span><span style="color: #0000BB">fileExists</span><span style="color: #007700">()<br />    {<br />        if (!</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fileName</span><span style="color: #007700">)) {<br />            throw new </span><span style="color: #0000BB">RuntimeException</span><span style="color: #007700">(</span><span style="color: #DD0000">"Dosya yok"</span><span style="color: #007700">);<br />        }<br />    }<br /><br />    #[</span><span style="color: #0000BB">SetUp</span><span style="color: #007700">]<br />    public function </span><span style="color: #0000BB">targetDirectoryExists</span><span style="color: #007700">()<br />    {<br />        if (!</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">targetDirectory</span><span style="color: #007700">)) {<br />            </span><span style="color: #0000BB">mkdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">targetDirectory</span><span style="color: #007700">);<br />        } elseif (!</span><span style="color: #0000BB">is_dir</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">targetDirectory</span><span style="color: #007700">)) {<br />            throw new </span><span style="color: #0000BB">RuntimeException</span><span style="color: #007700">(</span><span style="color: #DD0000">"Hedef dizin </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">targetDirectory</span><span style="color: #DD0000"> bir dizin değil"</span><span style="color: #007700">);<br />        }<br />    }<br /><br />    public function </span><span style="color: #0000BB">execute</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">copy</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fileName</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">targetDirectory </span><span style="color: #007700">. </span><span style="color: #DD0000">'/' </span><span style="color: #007700">. </span><span style="color: #0000BB">basename</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fileName</span><span style="color: #007700">));<br />    }<br />}<br /><br />function </span><span style="color: #0000BB">executeAction</span><span style="color: #007700">(</span><span style="color: #0000BB">ActionHandler $actionHandler</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$reflection </span><span style="color: #007700">= new </span><span style="color: #0000BB">ReflectionObject</span><span style="color: #007700">(</span><span style="color: #0000BB">$actionHandler</span><span style="color: #007700">);<br /><br />    foreach (</span><span style="color: #0000BB">$reflection</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMethods</span><span style="color: #007700">() as </span><span style="color: #0000BB">$method</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$attributes </span><span style="color: #007700">= </span><span style="color: #0000BB">$method</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getAttributes</span><span style="color: #007700">(</span><span style="color: #0000BB">SetUp</span><span style="color: #007700">::class);<br /><br />        if (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$attributes</span><span style="color: #007700">) &gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">$methodName </span><span style="color: #007700">= </span><span style="color: #0000BB">$method</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getName</span><span style="color: #007700">();<br /><br />            </span><span style="color: #0000BB">$actionHandler</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$methodName</span><span style="color: #007700">();<br />        }<br />    }<br /><br />    </span><span style="color: #0000BB">$actionHandler</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br />}<br /><br /></span><span style="color: #0000BB">$copyAction </span><span style="color: #007700">= new </span><span style="color: #0000BB">CopyFile</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$copyAction</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fileName </span><span style="color: #007700">= </span><span style="color: #DD0000">"/tmp/foo.jpg"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$copyAction</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">targetDirectory </span><span style="color: #007700">= </span><span style="color: #DD0000">"/home/user"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">executeAction</span><span style="color: #007700">(</span><span style="color: #0000BB">$copyAction</span><span style="color: #007700">);</span></span></code></div>
     </div>

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