<appendix id="coding-standard">
  <title>Zend Framework PHP Kodlama Standardı</title>
    <sect1 id="coding-standard.overview">
        <title>Genel Açıklama</title>

        <sect2 id="coding-standard.overview.scope">
            <title>Kapsam</title>

            <para>
        Bu belge geliştiriciler ve geliştirici takımları veya Zend Framework üzerinde
        geliştirme yapanlar için yönergeler ve kaynaklar sağlamaktadır.
        Kapsanan konular :

                <itemizedlist>
                    <listitem>
                        <para>PHP Dosya Biçimlemesi</para>
                    </listitem>

                    <listitem>
                        <para>İsimlendirme Kuralları</para>
                    </listitem>

                    <listitem>
                        <para>Kodlama Stili</para>
                    </listitem>

                    <listitem>
                        <para>Satıriçi Belgelendirme</para>
                    </listitem>
                </itemizedlist>
            </para>
        </sect2>

        <sect2 id="coding-standard.overview.goals">
            <title>Amaçlar</title>

            <para>
        Her geliştirme projesinde iyi kodlama standartları önemlidir , ama bilhassa birden fazla
        geliştirici aynı proje üstünde çalıştığında önemlidir.Kodlama standartlarına sahip olmak
        kodun yüksek kaliteli , az hatalı ve kolayca bakıma alınabilir olmasını sağlamaktadır.
            </para>
        </sect2>
    </sect1>

    <sect1 id="coding-standard.php-file-formatting">
        <title>PHP Dosya Biçimlemesi</title>

        <sect2 id="coding-standard.php-file-formatting.general">
            <title>Genel</title>

            <para>
                Sadece PHP kodu içeren dosyalar için kapama etiketi ("?>") kullanılmamalı.
        PHP tarafından ihtiyaç duyulmamaktadır.Bunu eklememek takip eden whitespace karakterlerin kazayla
        çıktıya eklenmesini önlemektedir.
            </para>

            <para>
                <emphasis>ÖNEMLİ:</emphasis><code>__HALT_COMPILER()</code> ile ikili herhangi veri dahil edilebilir olmasına
        rağmen herhangi bir Zend Framework PHP dosyasıyla veya bunlardan türetilen dosyalarda dahil etme engellenmiştir.
        Bu özelliğin kullanımına sadece bazı özel kurulum betiklerinde izin verilmiştir.
            </para>
        </sect2>

        <sect2 id="coding-standard.php-file-formatting.indentation">
            <title>Girintili Yazma</title>

            <para>Satırbaşı boşluğu olarak tab olmadan 4 boşluk kullanın.</para>
        </sect2>

        <sect2 id="coding-standard.php-file-formatting.max-line-length">
            <title>Maksimum Satır Uzunluğu</title>

            <para>
                Hedef satır uzunluğu 80 karakterdir , örn. geliştiriciler mümkün olduğunca
        kodu pratik olan 80-sütün sınırına yakın tutmalılar.Gene de daha uzun satırlar
        kabul edilebilir.Herhangi bir satır PHP kodunun maksimum uzunluğu 120 karakterdir.
            </para>
        </sect2>

        <sect2 id="coding-standard.php-file-formatting.line-termination">
            <title>Satır Sonlandırma</title>

            <para>
        Satır sonlandırma unix metin dosyaları için standart bir yöntemdir.Satırlar
        mutlaka linefeed(LF) ile bitmelidir.Linefeed'ler ordinal olarak 10 veya onaltılık
        olarak 0x0A şeklinde temsil edilir.
            </para>

        <para>Carriage return(CR)'leri Macintosh bilgisayarlardaki gibi (0x0D) kullanmayın. </para>

            <para>
        Carriage return/linefeed kombinasyonunu (CRLF) Windows bilgisayarlardaki gibi (0x0D, 0x0A) kullanmayın.
            </para>
        </sect2>
    </sect1>

    <sect1 id="coding-standard.naming-conventions">
        <title>İsimlendirme Kuralları</title>

        <sect2 id="coding-standard.naming-conventions.classes">
            <title>Sınıflar</title>

            <para>
        Zend Framework sınıfların isimlerini bulundukları dizinlere eşlenmesini sağlayan  bir isimlendirme kuralına sahip.
        Zend Framework'ün kök dizini altındaki tüm sınıfların hiyerarşik olarak barındırıldığı "Zend/" dizinidir.
            </para>

            <para>
                Sınıf isimleri sadece alfanümerik karakterlerden oluşabilir.
        Numaralar sınıf isimlerinde kullanılabilirler ancak bu kullanım uygun bulunmamaktadır.
        Altçizgilerin sadece konum ayıracının yerine kullanılmasına izin verilir -- "Zend/Db/Table.php" dosya
        adı mutlaka "Zend_Db_Table" sınıfına  eşleme yapmalıdır.
            </para>

            <para>
                Eğer sınıf adı birden çok kelimeden oluşuyorsa , her yeni kelimenin ilk harfi büyük harfe çevrilmelidir.
        Ardışık büyütülmüş harflere izin verilmez, ör. "Zend_Pdf" sınıf ismi kabul edilirken "Zend_PDF" sınıf adı
        kabul edilmez.
            </para>

            <para>
        Zend tarafından veya katılımcı ortak firmalardan biri tarafından
        yazılan ve Zend Framework ile dağıtılan Zend Framework sınıfları "Zend_" ile başlamalı
        ve bundan dolayı hiyerarşik olarak "Zend/" dizini içinde yerini almalı.
            </para>

            <para>
                Bunlar sınıflar için kabul edilebilir isimler :


                <programlisting role="php"><![CDATA[
Zend_Db

Zend_View

Zend_View_Helper]]>
                </programlisting>

                <emphasis>ÖNEMLİ:</emphasis>  Framework ile çalışan fakat framework'ün bir parçası olmayan
        kod ör. framework'ün son kullanıcısı tarafından yazılan ve Zend veya framework'e ortak şirketlerin
        olmayan kod asla "Zend_" ile başlamamalıdır.
            </para>
        </sect2>

        <sect2 id="coding-standard.naming-conventions.interfaces">
            <title>Arayüzler</title>

            <para>
                Arayüz sınıfları diğer sınıflarla aynı kurallara uymalıdır (yukarıya bakın) ,
        buna rağmen aşağıdaki örneklerde olduğu gibi mutlaka "Interface" kelimesi ile bitmeli :

                <programlisting role="php"><![CDATA[
Zend_Log_Adapter_Interface
Zend_Controller_Dispatcher_Interface]]>
                </programlisting>
            </para>
        </sect2>

        <sect2 id="coding-standard.naming-conventions.filenames">
            <title>Dosya Adları</title>

            <para>
        Diğer tüm dosyalar için sadece alfanümerik karakterler , altçizgiler ve tire karakteri ("-")
        kullanılabilir. Boşluklar ve geri kalan karakterler kullanılamaz.
            </para>

            <para>
                PHP kodu içeren her dosya mutlaka ".php" dosya uzantısına sahip olmalıdır.
        Bu örnekler yukarıdaki bölümdeki sınıf isimlerini içererek kabul edilebilen dosya isimleri
        göstermektedir :


                <programlisting role="php"><![CDATA[
Zend/Db.php

Zend/Controller/Front.php

Zend/View/Helper/FormRadio.php]]>
                </programlisting>
        Dosya isimleri yukarıda açıklandığı gibi sınıf adına göre eşleşmeyi takip etmelidir.
            </para>
        </sect2>

        <sect2 id="coding-standard.naming-conventions.functions-and-methods">
            <title>Fonksiyonlar ve Metodlar</title>

            <para>
        Fonksiyon isimleri sadece alfanümerik karakterler içerebilir. Altçizgiler fonksiyon isimlerinde
        kullanılamaz. Numaralar kullanılabilir ancak bu kullanım uygun bulunmamaktadır
            </para>

            <para>
                Fonksiyon isimleri her zaman küçük harfle başlamalı. Fonksiyon ismi birden fazla kelimeden oluştuğunda
        her kelimenin ilk harfi büyük olmalı. Buna genellikle "camelCaps" metodu denir.
            </para>

            <para>
               Fonksiyon isimleri uzun yazılmalı.Fonksiyon isimlerinin uzun olması kodun pratik olarak anlaşılabilirliğini
           artırdığından , fonksiyon isimleri mümkün olduğunca uzun olmalı.
            </para>

            <para>
                Bunlar kabul edilebilir  fonksiyon isimleri:

                <programlisting role="php"><![CDATA[
filterInput()

getElementById()

widgetFactory()]]>
                </programlisting>
            </para>

            <para>
        Nesneye dayalı programlamada  nesne erişirleri(accessor) "get" veya "set" önekleri almalı.
        Dizayn kalıpları kullanırken  mesela iskelet veya fabrika kalıbları , methodun adı kalıbın
        adını içermeliki kalıb kolayca tanımlanabilsin.
            </para>

            <para>
        Fonksiyonlar ("floating functions") genel kapsamda kullanılabilir ancak bu kullanım uygun bulunmamaktadır.
                Bu fonksiyonları static bir sınıf'ın içine koymalısınız.
            </para>
        </sect2>

        <sect2 id="coding-standard.naming-conventions.variables">
            <title>Değişkenler</title>

            <para>
                Değişken isimleri sadece alfanümerik karakterleden oluşabilir.Altçizgi kullanılamaz.
        Değişken isimlerinde numaralar kullanılabilir ancak bu kullanım uygun bulunmamaktadır.

            </para>

            <para>
                "private" veya "protected" construct'ı ile tanımlanmış sınıf üyesi değişkenlerin
        değişken isminin ilk harfi altçizgi olmalı.Bu fonksiyon adında altçizgi kullanılabilir tek  kullanım
        şeklidir. "public" ile tanımlanmış üye değişkenler asla altçizgi ile başlamamalı.
            </para>

            <para>
                Fonksiyon isimlerinde (bölüm 3.3,yukarıda) olduğu gibi değişken isimleride her zaman
        küçük harfle başlamalı ve "camelCaps" kuralına uymalı.
            </para>

            <para>
                Değişkenler pratik olabilecek kadar uzun olmalı. "$i" ve "$n" gibi kısa ve öz değişken isimleri
        küçük döngüler dışında kullanılmamalı. Eğer bir döngü 20 satırdan fazla ise , indisler için olan değişkenlerin
        daha açıklayıcı isimleri olmalı.
            </para>
        </sect2>

        <sect2 id="coding-standard.naming-conventions.constants">
            <title>Sabitler</title>

            <para>
                Sabitler hem altçizgi hemde alfanümerik karakterler içerebilir. Sabit isimlerinde sayılar kullanılabilir.
            </para>

            <para>
                Sabitlerin tüm harfleri mutlaka büyük olmalı.
            </para>

            <para>
                Okunabilirliği artırmak için sabitlerdeki kelimeler altçizgilerle ayrılmalı. Örneğin
        <code>EMBED_SUPPRESS_EMBED_EXCEPTION</code> kabul olmasına karşın <code>EMBED_SUPPRESSEMBEDEXCEPTION</code>
        kabul edilmez.
            </para>

            <para>
                Sabitler "const" construct'ı kullanılarak sınıf üyeleri olarak tanımlanmalı.
        Sabitler genel kapsamda "define" ile tanımlanabilmesine karşın bu tanımlama uygun görülmemektedir.
            </para>
        </sect2>
    </sect1>

    <sect1 id="coding-standard.coding-style">
        <title>Kodlama Stili</title>

        <sect2 id="coding-standard.coding-style.php-code-demarcation">
            <title>PHP Kodu Sınırlaması</title>

            <para>
                PHP kodu her zaman için tam,standart PHP tagleri ile ayrılmalı :

                <programlisting role="php"><![CDATA[<?php

?>]]></programlisting>
            </para>

            <para>
                Kısa taglere izin verilmez. Sadece PHP kodu içeren dosyalarda kapama tagi her zaman
        için gözardı edilmeli (bakınız <xref linkend="coding-standard.php-file-formatting.general" />).
            </para>
        </sect2>

        <sect2 id="coding-standard.coding-style.strings">
            <title>Stringler</title>

            <sect3 id="coding-standard.coding-style.strings.literals">
                <title>Yalın Stringler</title>

                <para>
                    Bir string yalın olduğunda (değişken değişimi olmadığında) , kesme işareti veya
            "tek tırnak" her zaman stringi ayırmak için kullanılır:

                    <programlisting role="php"><![CDATA[
$a = 'Örnek String';]]>
                    </programlisting>
                </para>
            </sect3>

            <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
                <title>Kesme işareti içeren Yalın Stringler</title>

                <para>
            Bir yalın string kesme işareti içerdiği zaman string tırnak işareti veya çift tırnak ile ayrılmalı.
            Bu özellikle SQL ifadelerine uygun :


                    <programlisting role="php"><![CDATA[
$sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";]]>
                    </programlisting>

                    Yukarıdaki söz dizimi tek tırnak escapelemeye göre tercih edilir.
                </para>
            </sect3>

            <sect3 id="coding-standard.coding-style.strings.variable-substitution">
                <title>Değişken Yerine koyma</title>

                <para>
                    Değişken yerine koyma şu iki şekilde yapılabilir :


                    <programlisting role="php"><![CDATA[
$greeting = "Merhaba $isim, tekrar hoşgeldin!";

$greeting = "Merhaba {$isim}, tekrar hoşgeldin!";]]>
                    </programlisting>
                </para>

                <para>
                    Tutarlılık için bu kullanıma izin verilmez :


                    <programlisting role="php"><![CDATA[
$greeting = "Merhaba ${isim}, tekrar hoşgeldin!";]]>
                    </programlisting>
                </para>
            </sect3>

            <sect3 id="coding-standard.coding-style.strings.string-concatenation">
                <title>String Birleştirme</title>

                <para>
                    Stringler "." operetörü ile birleştirilebilirler. Okunabilirliği artırmak için
            "." operatöründen önce ve sonra boşluk bırakılmalı :

                    <programlisting role="php"><![CDATA[
$company = 'Zend' . 'Technologies';]]>
                    </programlisting>
                </para>

                <para>
                    Stringleri "." operetörü ile birleştirirken okunabilirliği artırmak için
            ifadeyi birden çok satıra bölebiliriz.Bu gibi durumlarda her başarılı satır
            "." operatörünün "=" operatörünün altına döşendiği gibi whitespace ile takviye
            edilmeli :

                    <programlisting role="php"><![CDATA[
$sql = "SELECT `id`, `name` FROM `people` "
     . "WHERE `name` = 'Susan' "
     . "ORDER BY `name` ASC ";]]>
                    </programlisting>
                </para>
            </sect3>
        </sect2>

        <sect2 id="coding-standard.coding-style.arrays">
            <title>Diziler</title>

            <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
                <title>Sayısal İndeksli Diziler</title>

                <para>Negatif sayılar indis olamaz.</para>

                <para>
                    İndeksli bir dizi negatif olmayan bir sayı ile başlayabilir halbuki bu uygun değildir
            ve tüm dizilerin başlangıç indeksi 0 olmalı.
                </para>

                <para>
            İndeksli dizileri <code>array</code> construct'ı ile tanımlarken  , okunabilirliği artırmak için
            her virgül ayıracından sonra  boşluk bırakılmalı :


                    <programlisting role="php"><![CDATA[
$sampleArray = array(1, 2, 3, 'Zend', 'Studio');]]>
                    </programlisting>
                </para>

                <para>
                    "array" construct'ı ile çok satırlı indeksli diziler de tanımlanabilir.
            Bu durumda aşağıda gösterildiği gibi her başarılı satırın başlangıcı aynı hizaya gelecek şekilde
            boşluklarla takviye edilmeli :

                    <programlisting role="php"><![CDATA[
$sampleArray = array(1, 2, 3, 'Zend', 'Studio',
                     $a, $b, $c,
                     56.44, $d, 500);]]>
                    </programlisting>
                </para>
            </sect3>

            <sect3 id="coding-standard.coding-style.arrays.associative">
                <title>Birleşmeli Diziler</title>

                <para>
                    Birleşmeli dizileri <code>array</code> construct'ı ile tanımlarken ifadeyi satırlara bölmek
            tavsiye edilir. Bu durumda her başarılı satır her anahtar ve değer aynı hizaya gelecek
            şekilde whitespace ile takviye edilmeli:


                    <programlisting role="php"><![CDATA[
$sampleArray = array('ilkAnahtar'  => 'ilkDeger',
                     'ikinciAnahtar' => 'ikinciDeger');]]>
                    </programlisting>
                </para>
            </sect3>
        </sect2>

        <sect2 id="coding-standard.coding-style.classes">
            <title>Sınıflar</title>

            <sect3 id="coding-standard.coding-style.classes.declaration">
                <title>Sınıf Tanımlama</title>

                <para>
                    Sınıflar takip eden isimlendirme kurallarına göre isimlendirilmeli.
                </para><para>
                   Büyük parantez her zaman  sınıf isminin hemen antındaki satıra yazılır ("Bir gerçek büyük parantez" formu).
                </para><para>
                    Her sınıfın PHPDocumentor  standardına uyan bilgilendirme kısmı olmalı.
                </para><para>
                    Sınıf içindeki her kod içeriden 4 boşluk ile başlamalı.
                </para><para>
                    Bir PHP dosyasında bir sınıf olabilir.
                </para><para>
                    Sınıf dosyası içine ek kod eklenebilir ancak bu uygun bulunmuyor. Böyle dosyalarda iki boş satır sınıf ile ek PHP kodunu birbirinden ayırmalı.
                </para><para>
                    Kabul edilebilir sınıf tanımlaması örneği :

                    <programlisting role="php"><![CDATA[
/**
 * Bilgilendirme kısmı buraya
 */
class SampleClass
{
    // sınıfın tüm içeriği
    // içeriden 4 boşluk ile başlamalı
}]]>
                    </programlisting>
                </para>
            </sect3>

            <sect3 id="coding-standard.coding-style.classes.member-variables">
                <title>Sınıf Üyesi Değişkenler</title>

                <para>
                    Üye değişkenler takip eden değişken isimlendirme kurallarına göre isimlendirilmeli.
                </para><para>
                    Sınıf içinde tanımlanmış her değişken sınıfın en üstünde , herhangi bir fonksiyon tanımlamadan
            listelenmeli.
                </para><para>
                    <code>var</code> construct'ına izin verilmez. Üye değişkenler görünürlüklerini her zaman
            <code>private</code>,<code>protected</code> veya <code>public</code> constructlarından biriyle
            tanımlar.Üye değişkenlere direk erişim için onları public yapabilirsiniz ama erişir değişkenler (set/get)
            kabul gördüğünden bu yöntem uygun değildir.
                </para>
            </sect3>
        </sect2>

        <sect2 id="coding-standard.coding-style.functions-and-methods">
            <title>Fonksiyonlar ve Metodlar</title>

            <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
                <title>Fonksion ve Metod Tanımlaması</title>

                <para>
                    Fonksiyonlar takip eden isimlendirme kurallarına göre isimlendirilmeli.
                </para><para>
            Sınıflar içindeki fonksiyonlar görünürlüklerini her zaman <code>private</code>,<code>protected</code>
            veya <code>public</code> constructlarından  biriyle tanımlanmalı.
                </para><para>
                    Sınıflarda olduğu gibi , her zaman büyük parantez fonksiyon isminin altındaki
            satıra yazılır.("Bir gerçek büyük parantez" formu).

            Fonksiyon ismi ile fonksiyon argümanları için açılan
            parantez arasında boşluk bulunmaz.

                </para><para>
                    Genel kapsamda fonksiyon kullanmak kesinlikle uygun bulunmuyor.
                </para><para>
                    Bir sınıfta kabuledilebilir fonksiyon tanımlaması örneği :


                    <programlisting role="php"><![CDATA[
/**
 * Bilgilendirme kısmı buraya
 */
class Foo
{
    /**
     * Bilgilendirme kısmı buraya
     */
    public function bar()
    {
        // fonksiyonun tüm içeriği
        // içeriden 4 boşluk ile başlamalı
    }
}]]>
                    </programlisting>
                </para>

                <para>
                    <emphasis>NOT:</emphasis> Referans atamasına sadece fonksiyon tanımlamasında izin veriliyor :

                    <programlisting role="php"><![CDATA[
/**
 * Bilgilendirme kısmı buraya
 */
class Foo
{
    /**
    * Bilgilendirme kısmı buraya
     */
    public function bar(&$baz)
    {}
}]]>
                    </programlisting>
                </para>

                <para>
                    Çağrı anında referans ile aktarım yapılamaz.
                </para>


                <para>
                    Return değeri parantez içine anlınmamalı. Bu okunabilirliğe engel olabilir ayrıca
            ilerde eğer metod referans ile return yapacak şekilde değişirse kodun çalışmasını
            durdurabilir.

                    <programlisting role="php"><![CDATA[
/**
* Bilgilendirme kısmı buraya
 */
class Foo
{
    /**
     * YANLIŞ
     */
    public function bar()
    {
        return($this->bar);
    }

    /**
     * DOĞRU
     */
    public function bar()
    {
        return $this->bar;
    }
}]]>
                    </programlisting>
                </para>

            </sect3>

            <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
                <title>Fonksiyon ve Metod Kullanımı</title>

                <para>
                    Fonksiyon argümanları virgülden ayıracından sonra bir boşluk bırakılarak yazılır.

                    Üç argüman alan bir fonksiyon için kabul edilebilir bir fonksiyon çağrısı örneği:


                    <programlisting role="php"><![CDATA[
threeArguments(1, 2, 3);]]>
                    </programlisting>
                </para>

                <para>
            Çağrı anında referans ile aktarım yapılamaz. Fonksiyon argümanlarını referans ile aktarmak için
            fonksiyon tanımlamaları bölümüne bakın.
                </para><para>

            Argüman olarak dizileri alabilen fonksiyonlar için fonksiyon çağrısı "array"
            construct'ını içerebilir ve okunabilirliği artırmak için satırlara ayrılabilir.
            Bu gibi durumlarda dizi yazım kuralları geçerliliğini korur:

                    <programlisting role="php"><![CDATA[
threeArguments(array(1, 2, 3), 2, 3);

threeArguments(array(1, 2, 3, 'Zend', 'Studio',
                     $a, $b, $c,
                     56.44, $d, 500), 2, 3);]]>
                    </programlisting>
                </para>
            </sect3>
        </sect2>

        <sect2 id="coding-standard.coding-style.control-statements">
            <title>Kontrol İfadeleri</title>

            <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
                <title>If / Else / Elseif</title>

                <para>
                   <code>if</code> ve <code>elseif</code> constructlarına dayanan kontrol ifadelerinde
           koşulun açılan parantezinden önce ve kapama parantezinden sonra bir boşluk bırakılmalı.
                </para>

                <para>
                    Parantezler içindeki koşullu ifadelerdeki operatörler okunabilirliği artırmak için boşluklarla
            ayrılmalı. Daha geniş koşulların mantıksal gruplandırılmasını geliştirmesi için
            iç parantez kullanılmalı.
                </para>

                <para>
                    Açılış parantezi koşullu ifade ile aynı satırda yazılır. Kapanış parantezi ise her zaman
            kendi satırına yazılır. Parantezler içindeki herhangi bir içerik dört boşluk bırakılarak yazılmalı.
                    <programlisting role="php"><![CDATA[
if ($a != 2) {
    $a = 2;
}]]>
                    </programlisting>
                </para>

                <para>
                    "else" veya "else" içeren "if" ifadeleri için biçimlendirme bu örneklerdeki gib olmalı :


                    <programlisting role="php"><![CDATA[
if ($a != 2) {
    $a = 2;
} else {
    $a = 7;
}


if ($a != 2) {
    $a = 2;
} elseif ($a == 3) {
    $a = 4;
} else {
    $a = 7;
}]]>
                    </programlisting>
                    PHP kimi durumlarda buradaki ifadelerin büyük parantez kullanmadan yazılmasına izin verir.
                    Kodlama standardında bir fark olmaz ve tüm "if" , "elseif" veya "else" ifadeleri
            büyük parantez kullanmak zorundadır.
                </para>

                <para>
                    "elseif" construct'ı kullanılabilir ama "else if" kombinasyonunun kabul görmesinden dolayı
            kullanılması uygun görülmemektedir.
                </para>
            </sect3>

            <sect3 id="coding-standards.coding-style.control-statements.switch">
                <title>Switch</title>

                <para>
                    "switch" construct'ı ile yazılan kontrol ifadelerinde koşulun açılış parantezinden önce ve
            koşulun kapanış parantezinden sonra bir boşluk bırakılmalı.
                </para>

                <para>
                    "switch" ifadesi içindeki tüm içerik içerinden dört boşluk ile başlamalı.
            "case" ifadesi altındaki her içerik ek olarak içeriden dört boşluk ile başlamalı.
                </para>

                <programlisting role="php"><![CDATA[
switch ($numPeople) {
    case 1:
        break;

    case 2:
        break;

    default:
        break;
}]]>
                </programlisting>

                <para>
                    <code>switch</code> ifadelerinde <code>default</code> construct'ı asla ihmal edilmemeli.
                </para>

                <para>

           <emphasis>NOT:</emphasis>Bazen <code>break</code> veya <code>return</code>  eklemeyerek  sıradaki case'e düşen <code>case</code>
            ifadesi yazmak yararlıdır.

            Bu gibi durumları hatalardan ayırt etmek için <code>break</code> veya  <code>return</code> ihmal edilmiş <code>case</code>
            ifadelerine "// break intentionally omitted"("//break kasıtlı olarak koyulmadı") yorumu eklenmeli.
                </para>
            </sect3>
        </sect2>

        <sect2 id="coding-standards.inline-documentation">
            <title>Satıriçi Belgelendirme</title>

            <sect3 id="coding-standards.inline-documentation.documentation-format">
                <title>Belgelendirme Biçimi</title>

                <para>
                    Tüm bilgilendirme kısımları ("docblocks") phpDocumentor biçimi ile uyumlu olmalı.
            phpDocumenter biçimini açıklamak bu belgenin kapsamı dışındadır.
            Daha fazla bilgi için lütfen ziyaret edin : <ulink url="http://phpdoc.org/">http://phpdoc.org/</ulink>
                </para>

                <para>
                    Zend Framework için veya Zend Framework ile çalışan her kaynak kod dosyası her dosyanın üstünde
            "dosya seviyesinde" ve her sınıfın üstünde "sınıf seviyesinde" bilgilendirme kısmı içermelidir.

            Aşağıdakiler bilgilendirme kısmı örnekleri :
                </para>
            </sect3>

            <sect3 id="coding-standards.inline-documentation.files">
                <title>Dosyalar</title>

                <para>
                    PHP kodu içeren her dosya üst kısmında en az aşağıdaki kadar phpDocumentor tagleri içerecek şekilde
            bir başlık kısmına sahip olmalı:

                    <programlisting role="php"><![CDATA[
/**
 * Dosyanın kısa açıklaması
 *
 * Dosya için uzun açıklama (eğer varsa)
 *
 * LİSANS: Lisans bilgisi
 *
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://www.zend.com/license/3_0.txt   PHP License 3.0
 * @version    $Id:$
 * @link       http://dev.zend.com/package/PackageName
 * @since      File available since Release 1.2.0
*/]]>
                    </programlisting>
                </para>
            </sect3>

            <sect3 id="coding-standards.inline-documentation.classes">
                <title>Sınıflar</title>

                <para>
                    Her sınıf en az aşağıdaki kadar phpDocumentor tagleri içerecek şekilde bilgilendirme kısmı içermeli :


                    <programlisting role="php"><![CDATA[
/**
 * Sınıfın kısa açıklaması
 *
 * Sınıfın uzun açıklaması (eğer varsa)
 *
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://www.zend.com/license/3_0.txt   PHP License 3.0
 * @version    Release: @package_version@
 * @link       http://dev.zend.com/package/PackageName
 * @since      Class available since Release 1.2.0
 * @deprecated Class deprecated in Release 2.0.0
 */]]>
                    </programlisting>
                </para>
            </sect3>

            <sect3 id="coding-standards.inline-documentation.functions">
                <title>Fonksiyonlar</title>

                <para>
                Her fonksiyon ,nesne methodları  en az aşağıdaki gibi bilgilendirme kısmı içermeli:

                    <itemizedlist>
                        <listitem><para>Fonksiyonun açıklaması</para></listitem>
                        <listitem><para>Tüm argümanlar</para></listitem>
                        <listitem><para>Tüm olası dönüş değerleri</para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    Fonksiyonun erişim seviyesi fonksiyon tanımlanırken "public","private" veya "protected" construct'ları ile
            tanımlandığı için "@access" taginin kullanılmasına gerek yoktur.

                </para>

                <para>

            Eğer fonksiyon/metod kural dışı durum(exception) fırlatabiliyorsa , @throws kullanın:


                    <programlisting role="php"><![CDATA[
@throws exceptionclass [açıklama]]]>
                    </programlisting>
                </para>
            </sect3>
        </sect2>
    </sect1>

</appendix>
<!--
vim:se ts=4 sw=4 et:
-->
