coding_standard.xml 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. <appendix id="coding-standard">
  2. <title>Zend Framework PHP Kodlama Standardı</title>
  3. <sect1 id="coding-standard.overview">
  4. <title>Genel Açıklama</title>
  5. <sect2 id="coding-standard.overview.scope">
  6. <title>Kapsam</title>
  7. <para>
  8. Bu belge geliştiriciler ve geliştirici takımları veya Zend Framework üzerinde
  9. geliştirme yapanlar için yönergeler ve kaynaklar sağlamaktadır.
  10. Kapsanan konular :
  11. <itemizedlist>
  12. <listitem>
  13. <para>PHP Dosya Biçimlemesi</para>
  14. </listitem>
  15. <listitem>
  16. <para>İsimlendirme Kuralları</para>
  17. </listitem>
  18. <listitem>
  19. <para>Kodlama Stili</para>
  20. </listitem>
  21. <listitem>
  22. <para>Satıriçi Belgelendirme</para>
  23. </listitem>
  24. </itemizedlist>
  25. </para>
  26. </sect2>
  27. <sect2 id="coding-standard.overview.goals">
  28. <title>Amaçlar</title>
  29. <para>
  30. Her geliştirme projesinde iyi kodlama standartları önemlidir , ama bilhassa birden fazla
  31. geliştirici aynı proje üstünde çalıştığında önemlidir.Kodlama standartlarına sahip olmak
  32. kodun yüksek kaliteli , az hatalı ve kolayca bakıma alınabilir olmasını sağlamaktadır.
  33. </para>
  34. </sect2>
  35. </sect1>
  36. <sect1 id="coding-standard.php-file-formatting">
  37. <title>PHP Dosya Biçimlemesi</title>
  38. <sect2 id="coding-standard.php-file-formatting.general">
  39. <title>Genel</title>
  40. <para>
  41. Sadece PHP kodu içeren dosyalar için kapama etiketi ("?>") kullanılmamalı.
  42. PHP tarafından ihtiyaç duyulmamaktadır.Bunu eklememek takip eden whitespace karakterlerin kazayla
  43. çıktıya eklenmesini önlemektedir.
  44. </para>
  45. <para>
  46. <emphasis>ÖNEMLİ:</emphasis><code>__HALT_COMPILER()</code> ile ikili herhangi veri dahil edilebilir olmasına
  47. rağmen herhangi bir Zend Framework PHP dosyasıyla veya bunlardan türetilen dosyalarda dahil etme engellenmiştir.
  48. Bu özelliğin kullanımına sadece bazı özel kurulum betiklerinde izin verilmiştir.
  49. </para>
  50. </sect2>
  51. <sect2 id="coding-standard.php-file-formatting.indentation">
  52. <title>Girintili Yazma</title>
  53. <para>Satırbaşı boşluğu olarak tab olmadan 4 boşluk kullanın.</para>
  54. </sect2>
  55. <sect2 id="coding-standard.php-file-formatting.max-line-length">
  56. <title>Maksimum Satır Uzunluğu</title>
  57. <para>
  58. Hedef satır uzunluğu 80 karakterdir , örn. geliştiriciler mümkün olduğunca
  59. kodu pratik olan 80-sütün sınırına yakın tutmalılar.Gene de daha uzun satırlar
  60. kabul edilebilir.Herhangi bir satır PHP kodunun maksimum uzunluğu 120 karakterdir.
  61. </para>
  62. </sect2>
  63. <sect2 id="coding-standard.php-file-formatting.line-termination">
  64. <title>Satır Sonlandırma</title>
  65. <para>
  66. Satır sonlandırma unix metin dosyaları için standart bir yöntemdir.Satırlar
  67. mutlaka linefeed(LF) ile bitmelidir.Linefeed'ler ordinal olarak 10 veya onaltılık
  68. olarak 0x0A şeklinde temsil edilir.
  69. </para>
  70. <para>Carriage return(CR)'leri Macintosh bilgisayarlardaki gibi (0x0D) kullanmayın. </para>
  71. <para>
  72. Carriage return/linefeed kombinasyonunu (CRLF) Windows bilgisayarlardaki gibi (0x0D, 0x0A) kullanmayın.
  73. </para>
  74. </sect2>
  75. </sect1>
  76. <sect1 id="coding-standard.naming-conventions">
  77. <title>İsimlendirme Kuralları</title>
  78. <sect2 id="coding-standard.naming-conventions.classes">
  79. <title>Sınıflar</title>
  80. <para>
  81. Zend Framework sınıfların isimlerini bulundukları dizinlere eşlenmesini sağlayan bir isimlendirme kuralına sahip.
  82. Zend Framework'ün kök dizini altındaki tüm sınıfların hiyerarşik olarak barındırıldığı "Zend/" dizinidir.
  83. </para>
  84. <para>
  85. Sınıf isimleri sadece alfanümerik karakterlerden oluşabilir.
  86. Numaralar sınıf isimlerinde kullanılabilirler ancak bu kullanım uygun bulunmamaktadır.
  87. Altçizgilerin sadece konum ayıracının yerine kullanılmasına izin verilir -- "Zend/Db/Table.php" dosya
  88. adı mutlaka "Zend_Db_Table" sınıfına eşleme yapmalıdır.
  89. </para>
  90. <para>
  91. Eğer sınıf adı birden çok kelimeden oluşuyorsa , her yeni kelimenin ilk harfi büyük harfe çevrilmelidir.
  92. Ardışık büyütülmüş harflere izin verilmez, ör. "Zend_Pdf" sınıf ismi kabul edilirken "Zend_PDF" sınıf adı
  93. kabul edilmez.
  94. </para>
  95. <para>
  96. Zend tarafından veya katılımcı ortak firmalardan biri tarafından
  97. yazılan ve Zend Framework ile dağıtılan Zend Framework sınıfları "Zend_" ile başlamalı
  98. ve bundan dolayı hiyerarşik olarak "Zend/" dizini içinde yerini almalı.
  99. </para>
  100. <para>
  101. Bunlar sınıflar için kabul edilebilir isimler :
  102. <programlisting role="php"><![CDATA[
  103. Zend_Db
  104. Zend_View
  105. Zend_View_Helper]]>
  106. </programlisting>
  107. <emphasis>ÖNEMLİ:</emphasis> Framework ile çalışan fakat framework'ün bir parçası olmayan
  108. kod ör. framework'ün son kullanıcısı tarafından yazılan ve Zend veya framework'e ortak şirketlerin
  109. olmayan kod asla "Zend_" ile başlamamalıdır.
  110. </para>
  111. </sect2>
  112. <sect2 id="coding-standard.naming-conventions.interfaces">
  113. <title>Arayüzler</title>
  114. <para>
  115. Arayüz sınıfları diğer sınıflarla aynı kurallara uymalıdır (yukarıya bakın) ,
  116. buna rağmen aşağıdaki örneklerde olduğu gibi mutlaka "Interface" kelimesi ile bitmeli :
  117. <programlisting role="php"><![CDATA[
  118. Zend_Log_Adapter_Interface
  119. Zend_Controller_Dispatcher_Interface]]>
  120. </programlisting>
  121. </para>
  122. </sect2>
  123. <sect2 id="coding-standard.naming-conventions.filenames">
  124. <title>Dosya Adları</title>
  125. <para>
  126. Diğer tüm dosyalar için sadece alfanümerik karakterler , altçizgiler ve tire karakteri ("-")
  127. kullanılabilir. Boşluklar ve geri kalan karakterler kullanılamaz.
  128. </para>
  129. <para>
  130. PHP kodu içeren her dosya mutlaka ".php" dosya uzantısına sahip olmalıdır.
  131. Bu örnekler yukarıdaki bölümdeki sınıf isimlerini içererek kabul edilebilen dosya isimleri
  132. göstermektedir :
  133. <programlisting role="php"><![CDATA[
  134. Zend/Db.php
  135. Zend/Controller/Front.php
  136. Zend/View/Helper/FormRadio.php]]>
  137. </programlisting>
  138. Dosya isimleri yukarıda açıklandığı gibi sınıf adına göre eşleşmeyi takip etmelidir.
  139. </para>
  140. </sect2>
  141. <sect2 id="coding-standard.naming-conventions.functions-and-methods">
  142. <title>Fonksiyonlar ve Metodlar</title>
  143. <para>
  144. Fonksiyon isimleri sadece alfanümerik karakterler içerebilir. Altçizgiler fonksiyon isimlerinde
  145. kullanılamaz. Numaralar kullanılabilir ancak bu kullanım uygun bulunmamaktadır
  146. </para>
  147. <para>
  148. Fonksiyon isimleri her zaman küçük harfle başlamalı. Fonksiyon ismi birden fazla kelimeden oluştuğunda
  149. her kelimenin ilk harfi büyük olmalı. Buna genellikle "camelCaps" metodu denir.
  150. </para>
  151. <para>
  152. Fonksiyon isimleri uzun yazılmalı.Fonksiyon isimlerinin uzun olması kodun pratik olarak anlaşılabilirliğini
  153. artırdığından , fonksiyon isimleri mümkün olduğunca uzun olmalı.
  154. </para>
  155. <para>
  156. Bunlar kabul edilebilir fonksiyon isimleri:
  157. <programlisting role="php"><![CDATA[
  158. filterInput()
  159. getElementById()
  160. widgetFactory()]]>
  161. </programlisting>
  162. </para>
  163. <para>
  164. Nesneye dayalı programlamada nesne erişirleri(accessor) "get" veya "set" önekleri almalı.
  165. Dizayn kalıpları kullanırken mesela iskelet veya fabrika kalıbları , methodun adı kalıbın
  166. adını içermeliki kalıb kolayca tanımlanabilsin.
  167. </para>
  168. <para>
  169. Fonksiyonlar ("floating functions") genel kapsamda kullanılabilir ancak bu kullanım uygun bulunmamaktadır.
  170. Bu fonksiyonları static bir sınıf'ın içine koymalısınız.
  171. </para>
  172. </sect2>
  173. <sect2 id="coding-standard.naming-conventions.variables">
  174. <title>Değişkenler</title>
  175. <para>
  176. Değişken isimleri sadece alfanümerik karakterleden oluşabilir.Altçizgi kullanılamaz.
  177. Değişken isimlerinde numaralar kullanılabilir ancak bu kullanım uygun bulunmamaktadır.
  178. </para>
  179. <para>
  180. "private" veya "protected" construct'ı ile tanımlanmış sınıf üyesi değişkenlerin
  181. değişken isminin ilk harfi altçizgi olmalı.Bu fonksiyon adında altçizgi kullanılabilir tek kullanım
  182. şeklidir. "public" ile tanımlanmış üye değişkenler asla altçizgi ile başlamamalı.
  183. </para>
  184. <para>
  185. Fonksiyon isimlerinde (bölüm 3.3,yukarıda) olduğu gibi değişken isimleride her zaman
  186. küçük harfle başlamalı ve "camelCaps" kuralına uymalı.
  187. </para>
  188. <para>
  189. Değişkenler pratik olabilecek kadar uzun olmalı. "$i" ve "$n" gibi kısa ve öz değişken isimleri
  190. 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
  191. daha açıklayıcı isimleri olmalı.
  192. </para>
  193. </sect2>
  194. <sect2 id="coding-standard.naming-conventions.constants">
  195. <title>Sabitler</title>
  196. <para>
  197. Sabitler hem altçizgi hemde alfanümerik karakterler içerebilir. Sabit isimlerinde sayılar kullanılabilir.
  198. </para>
  199. <para>
  200. Sabitlerin tüm harfleri mutlaka büyük olmalı.
  201. </para>
  202. <para>
  203. Okunabilirliği artırmak için sabitlerdeki kelimeler altçizgilerle ayrılmalı. Örneğin
  204. <code>EMBED_SUPPRESS_EMBED_EXCEPTION</code> kabul olmasına karşın <code>EMBED_SUPPRESSEMBEDEXCEPTION</code>
  205. kabul edilmez.
  206. </para>
  207. <para>
  208. Sabitler "const" construct'ı kullanılarak sınıf üyeleri olarak tanımlanmalı.
  209. Sabitler genel kapsamda "define" ile tanımlanabilmesine karşın bu tanımlama uygun görülmemektedir.
  210. </para>
  211. </sect2>
  212. </sect1>
  213. <sect1 id="coding-standard.coding-style">
  214. <title>Kodlama Stili</title>
  215. <sect2 id="coding-standard.coding-style.php-code-demarcation">
  216. <title>PHP Kodu Sınırlaması</title>
  217. <para>
  218. PHP kodu her zaman için tam,standart PHP tagleri ile ayrılmalı :
  219. <programlisting role="php"><![CDATA[<?php
  220. ?>]]></programlisting>
  221. </para>
  222. <para>
  223. Kısa taglere izin verilmez. Sadece PHP kodu içeren dosyalarda kapama tagi her zaman
  224. için gözardı edilmeli (bakınız <xref linkend="coding-standard.php-file-formatting.general" />).
  225. </para>
  226. </sect2>
  227. <sect2 id="coding-standard.coding-style.strings">
  228. <title>Stringler</title>
  229. <sect3 id="coding-standard.coding-style.strings.literals">
  230. <title>Yalın Stringler</title>
  231. <para>
  232. Bir string yalın olduğunda (değişken değişimi olmadığında) , kesme işareti veya
  233. "tek tırnak" her zaman stringi ayırmak için kullanılır:
  234. <programlisting role="php"><![CDATA[
  235. $a = 'Örnek String';]]>
  236. </programlisting>
  237. </para>
  238. </sect3>
  239. <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
  240. <title>Kesme işareti içeren Yalın Stringler</title>
  241. <para>
  242. Bir yalın string kesme işareti içerdiği zaman string tırnak işareti veya çift tırnak ile ayrılmalı.
  243. Bu özellikle SQL ifadelerine uygun :
  244. <programlisting role="php"><![CDATA[
  245. $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";]]>
  246. </programlisting>
  247. Yukarıdaki söz dizimi tek tırnak escapelemeye göre tercih edilir.
  248. </para>
  249. </sect3>
  250. <sect3 id="coding-standard.coding-style.strings.variable-substitution">
  251. <title>Değişken Yerine koyma</title>
  252. <para>
  253. Değişken yerine koyma şu iki şekilde yapılabilir :
  254. <programlisting role="php"><![CDATA[
  255. $greeting = "Merhaba $isim, tekrar hoşgeldin!";
  256. $greeting = "Merhaba {$isim}, tekrar hoşgeldin!";]]>
  257. </programlisting>
  258. </para>
  259. <para>
  260. Tutarlılık için bu kullanıma izin verilmez :
  261. <programlisting role="php"><![CDATA[
  262. $greeting = "Merhaba ${isim}, tekrar hoşgeldin!";]]>
  263. </programlisting>
  264. </para>
  265. </sect3>
  266. <sect3 id="coding-standard.coding-style.strings.string-concatenation">
  267. <title>String Birleştirme</title>
  268. <para>
  269. Stringler "." operetörü ile birleştirilebilirler. Okunabilirliği artırmak için
  270. "." operatöründen önce ve sonra boşluk bırakılmalı :
  271. <programlisting role="php"><![CDATA[
  272. $company = 'Zend' . 'Technologies';]]>
  273. </programlisting>
  274. </para>
  275. <para>
  276. Stringleri "." operetörü ile birleştirirken okunabilirliği artırmak için
  277. ifadeyi birden çok satıra bölebiliriz.Bu gibi durumlarda her başarılı satır
  278. "." operatörünün "=" operatörünün altına döşendiği gibi whitespace ile takviye
  279. edilmeli :
  280. <programlisting role="php"><![CDATA[
  281. $sql = "SELECT `id`, `name` FROM `people` "
  282. . "WHERE `name` = 'Susan' "
  283. . "ORDER BY `name` ASC ";]]>
  284. </programlisting>
  285. </para>
  286. </sect3>
  287. </sect2>
  288. <sect2 id="coding-standard.coding-style.arrays">
  289. <title>Diziler</title>
  290. <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
  291. <title>Sayısal İndeksli Diziler</title>
  292. <para>Negatif sayılar indis olamaz.</para>
  293. <para>
  294. İndeksli bir dizi negatif olmayan bir sayı ile başlayabilir halbuki bu uygun değildir
  295. ve tüm dizilerin başlangıç indeksi 0 olmalı.
  296. </para>
  297. <para>
  298. İndeksli dizileri <code>array</code> construct'ı ile tanımlarken , okunabilirliği artırmak için
  299. her virgül ayıracından sonra boşluk bırakılmalı :
  300. <programlisting role="php"><![CDATA[
  301. $sampleArray = array(1, 2, 3, 'Zend', 'Studio');]]>
  302. </programlisting>
  303. </para>
  304. <para>
  305. "array" construct'ı ile çok satırlı indeksli diziler de tanımlanabilir.
  306. Bu durumda aşağıda gösterildiği gibi her başarılı satırın başlangıcı aynı hizaya gelecek şekilde
  307. boşluklarla takviye edilmeli :
  308. <programlisting role="php"><![CDATA[
  309. $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
  310. $a, $b, $c,
  311. 56.44, $d, 500);]]>
  312. </programlisting>
  313. </para>
  314. </sect3>
  315. <sect3 id="coding-standard.coding-style.arrays.associative">
  316. <title>Birleşmeli Diziler</title>
  317. <para>
  318. Birleşmeli dizileri <code>array</code> construct'ı ile tanımlarken ifadeyi satırlara bölmek
  319. tavsiye edilir. Bu durumda her başarılı satır her anahtar ve değer aynı hizaya gelecek
  320. şekilde whitespace ile takviye edilmeli:
  321. <programlisting role="php"><![CDATA[
  322. $sampleArray = array('ilkAnahtar' => 'ilkDeger',
  323. 'ikinciAnahtar' => 'ikinciDeger');]]>
  324. </programlisting>
  325. </para>
  326. </sect3>
  327. </sect2>
  328. <sect2 id="coding-standard.coding-style.classes">
  329. <title>Sınıflar</title>
  330. <sect3 id="coding-standard.coding-style.classes.declaration">
  331. <title>Sınıf Tanımlama</title>
  332. <para>
  333. Sınıflar takip eden isimlendirme kurallarına göre isimlendirilmeli.
  334. </para><para>
  335. 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).
  336. </para><para>
  337. Her sınıfın PHPDocumentor standardına uyan bilgilendirme kısmı olmalı.
  338. </para><para>
  339. Sınıf içindeki her kod içeriden 4 boşluk ile başlamalı.
  340. </para><para>
  341. Bir PHP dosyasında bir sınıf olabilir.
  342. </para><para>
  343. 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ı.
  344. </para><para>
  345. Kabul edilebilir sınıf tanımlaması örneği :
  346. <programlisting role="php"><![CDATA[
  347. /**
  348. * Bilgilendirme kısmı buraya
  349. */
  350. class SampleClass
  351. {
  352. // sınıfın tüm içeriği
  353. // içeriden 4 boşluk ile başlamalı
  354. }]]>
  355. </programlisting>
  356. </para>
  357. </sect3>
  358. <sect3 id="coding-standard.coding-style.classes.member-variables">
  359. <title>Sınıf Üyesi Değişkenler</title>
  360. <para>
  361. Üye değişkenler takip eden değişken isimlendirme kurallarına göre isimlendirilmeli.
  362. </para><para>
  363. Sınıf içinde tanımlanmış her değişken sınıfın en üstünde , herhangi bir fonksiyon tanımlamadan
  364. listelenmeli.
  365. </para><para>
  366. <code>var</code> construct'ına izin verilmez. Üye değişkenler görünürlüklerini her zaman
  367. <code>private</code>,<code>protected</code> veya <code>public</code> constructlarından biriyle
  368. tanımlar.Üye değişkenlere direk erişim için onları public yapabilirsiniz ama erişir değişkenler (set/get)
  369. kabul gördüğünden bu yöntem uygun değildir.
  370. </para>
  371. </sect3>
  372. </sect2>
  373. <sect2 id="coding-standard.coding-style.functions-and-methods">
  374. <title>Fonksiyonlar ve Metodlar</title>
  375. <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
  376. <title>Fonksion ve Metod Tanımlaması</title>
  377. <para>
  378. Fonksiyonlar takip eden isimlendirme kurallarına göre isimlendirilmeli.
  379. </para><para>
  380. Sınıflar içindeki fonksiyonlar görünürlüklerini her zaman <code>private</code>,<code>protected</code>
  381. veya <code>public</code> constructlarından biriyle tanımlanmalı.
  382. </para><para>
  383. Sınıflarda olduğu gibi , her zaman büyük parantez fonksiyon isminin altındaki
  384. satıra yazılır.("Bir gerçek büyük parantez" formu).
  385. Fonksiyon ismi ile fonksiyon argümanları için açılan
  386. parantez arasında boşluk bulunmaz.
  387. </para><para>
  388. Genel kapsamda fonksiyon kullanmak kesinlikle uygun bulunmuyor.
  389. </para><para>
  390. Bir sınıfta kabuledilebilir fonksiyon tanımlaması örneği :
  391. <programlisting role="php"><![CDATA[
  392. /**
  393. * Bilgilendirme kısmı buraya
  394. */
  395. class Foo
  396. {
  397. /**
  398. * Bilgilendirme kısmı buraya
  399. */
  400. public function bar()
  401. {
  402. // fonksiyonun tüm içeriği
  403. // içeriden 4 boşluk ile başlamalı
  404. }
  405. }]]>
  406. </programlisting>
  407. </para>
  408. <para>
  409. <emphasis>NOT:</emphasis> Referans atamasına sadece fonksiyon tanımlamasında izin veriliyor :
  410. <programlisting role="php"><![CDATA[
  411. /**
  412. * Bilgilendirme kısmı buraya
  413. */
  414. class Foo
  415. {
  416. /**
  417. * Bilgilendirme kısmı buraya
  418. */
  419. public function bar(&$baz)
  420. {}
  421. }]]>
  422. </programlisting>
  423. </para>
  424. <para>
  425. Çağrı anında referans ile aktarım yapılamaz.
  426. </para>
  427. <para>
  428. Return değeri parantez içine anlınmamalı. Bu okunabilirliğe engel olabilir ayrıca
  429. ilerde eğer metod referans ile return yapacak şekilde değişirse kodun çalışmasını
  430. durdurabilir.
  431. <programlisting role="php"><![CDATA[
  432. /**
  433. * Bilgilendirme kısmı buraya
  434. */
  435. class Foo
  436. {
  437. /**
  438. * YANLIŞ
  439. */
  440. public function bar()
  441. {
  442. return($this->bar);
  443. }
  444. /**
  445. * DOĞRU
  446. */
  447. public function bar()
  448. {
  449. return $this->bar;
  450. }
  451. }]]>
  452. </programlisting>
  453. </para>
  454. </sect3>
  455. <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
  456. <title>Fonksiyon ve Metod Kullanımı</title>
  457. <para>
  458. Fonksiyon argümanları virgülden ayıracından sonra bir boşluk bırakılarak yazılır.
  459. Üç argüman alan bir fonksiyon için kabul edilebilir bir fonksiyon çağrısı örneği:
  460. <programlisting role="php"><![CDATA[
  461. threeArguments(1, 2, 3);]]>
  462. </programlisting>
  463. </para>
  464. <para>
  465. Çağrı anında referans ile aktarım yapılamaz. Fonksiyon argümanlarını referans ile aktarmak için
  466. fonksiyon tanımlamaları bölümüne bakın.
  467. </para><para>
  468. Argüman olarak dizileri alabilen fonksiyonlar için fonksiyon çağrısı "array"
  469. construct'ını içerebilir ve okunabilirliği artırmak için satırlara ayrılabilir.
  470. Bu gibi durumlarda dizi yazım kuralları geçerliliğini korur:
  471. <programlisting role="php"><![CDATA[
  472. threeArguments(array(1, 2, 3), 2, 3);
  473. threeArguments(array(1, 2, 3, 'Zend', 'Studio',
  474. $a, $b, $c,
  475. 56.44, $d, 500), 2, 3);]]>
  476. </programlisting>
  477. </para>
  478. </sect3>
  479. </sect2>
  480. <sect2 id="coding-standard.coding-style.control-statements">
  481. <title>Kontrol İfadeleri</title>
  482. <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
  483. <title>If / Else / Elseif</title>
  484. <para>
  485. <code>if</code> ve <code>elseif</code> constructlarına dayanan kontrol ifadelerinde
  486. koşulun açılan parantezinden önce ve kapama parantezinden sonra bir boşluk bırakılmalı.
  487. </para>
  488. <para>
  489. Parantezler içindeki koşullu ifadelerdeki operatörler okunabilirliği artırmak için boşluklarla
  490. ayrılmalı. Daha geniş koşulların mantıksal gruplandırılmasını geliştirmesi için
  491. iç parantez kullanılmalı.
  492. </para>
  493. <para>
  494. Açılış parantezi koşullu ifade ile aynı satırda yazılır. Kapanış parantezi ise her zaman
  495. kendi satırına yazılır. Parantezler içindeki herhangi bir içerik dört boşluk bırakılarak yazılmalı.
  496. <programlisting role="php"><![CDATA[
  497. if ($a != 2) {
  498. $a = 2;
  499. }]]>
  500. </programlisting>
  501. </para>
  502. <para>
  503. "else" veya "else" içeren "if" ifadeleri için biçimlendirme bu örneklerdeki gib olmalı :
  504. <programlisting role="php"><![CDATA[
  505. if ($a != 2) {
  506. $a = 2;
  507. } else {
  508. $a = 7;
  509. }
  510. if ($a != 2) {
  511. $a = 2;
  512. } elseif ($a == 3) {
  513. $a = 4;
  514. } else {
  515. $a = 7;
  516. }]]>
  517. </programlisting>
  518. PHP kimi durumlarda buradaki ifadelerin büyük parantez kullanmadan yazılmasına izin verir.
  519. Kodlama standardında bir fark olmaz ve tüm "if" , "elseif" veya "else" ifadeleri
  520. büyük parantez kullanmak zorundadır.
  521. </para>
  522. <para>
  523. "elseif" construct'ı kullanılabilir ama "else if" kombinasyonunun kabul görmesinden dolayı
  524. kullanılması uygun görülmemektedir.
  525. </para>
  526. </sect3>
  527. <sect3 id="coding-standards.coding-style.control-statements.switch">
  528. <title>Switch</title>
  529. <para>
  530. "switch" construct'ı ile yazılan kontrol ifadelerinde koşulun açılış parantezinden önce ve
  531. koşulun kapanış parantezinden sonra bir boşluk bırakılmalı.
  532. </para>
  533. <para>
  534. "switch" ifadesi içindeki tüm içerik içerinden dört boşluk ile başlamalı.
  535. "case" ifadesi altındaki her içerik ek olarak içeriden dört boşluk ile başlamalı.
  536. </para>
  537. <programlisting role="php"><![CDATA[
  538. switch ($numPeople) {
  539. case 1:
  540. break;
  541. case 2:
  542. break;
  543. default:
  544. break;
  545. }]]>
  546. </programlisting>
  547. <para>
  548. <code>switch</code> ifadelerinde <code>default</code> construct'ı asla ihmal edilmemeli.
  549. </para>
  550. <para>
  551. <emphasis>NOT:</emphasis>Bazen <code>break</code> veya <code>return</code> eklemeyerek sıradaki case'e düşen <code>case</code>
  552. ifadesi yazmak yararlıdır.
  553. Bu gibi durumları hatalardan ayırt etmek için <code>break</code> veya <code>return</code> ihmal edilmiş <code>case</code>
  554. ifadelerine "// break intentionally omitted"("//break kasıtlı olarak koyulmadı") yorumu eklenmeli.
  555. </para>
  556. </sect3>
  557. </sect2>
  558. <sect2 id="coding-standards.inline-documentation">
  559. <title>Satıriçi Belgelendirme</title>
  560. <sect3 id="coding-standards.inline-documentation.documentation-format">
  561. <title>Belgelendirme Biçimi</title>
  562. <para>
  563. Tüm bilgilendirme kısımları ("docblocks") phpDocumentor biçimi ile uyumlu olmalı.
  564. phpDocumenter biçimini açıklamak bu belgenin kapsamı dışındadır.
  565. Daha fazla bilgi için lütfen ziyaret edin : <ulink url="http://phpdoc.org/">http://phpdoc.org/</ulink>
  566. </para>
  567. <para>
  568. Zend Framework için veya Zend Framework ile çalışan her kaynak kod dosyası her dosyanın üstünde
  569. "dosya seviyesinde" ve her sınıfın üstünde "sınıf seviyesinde" bilgilendirme kısmı içermelidir.
  570. Aşağıdakiler bilgilendirme kısmı örnekleri :
  571. </para>
  572. </sect3>
  573. <sect3 id="coding-standards.inline-documentation.files">
  574. <title>Dosyalar</title>
  575. <para>
  576. PHP kodu içeren her dosya üst kısmında en az aşağıdaki kadar phpDocumentor tagleri içerecek şekilde
  577. bir başlık kısmına sahip olmalı:
  578. <programlisting role="php"><![CDATA[
  579. /**
  580. * Dosyanın kısa açıklaması
  581. *
  582. * Dosya için uzun açıklama (eğer varsa)
  583. *
  584. * LİSANS: Lisans bilgisi
  585. *
  586. * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
  587. * @license http://www.zend.com/license/3_0.txt PHP License 3.0
  588. * @version $Id:$
  589. * @link http://dev.zend.com/package/PackageName
  590. * @since File available since Release 1.2.0
  591. */]]>
  592. </programlisting>
  593. </para>
  594. </sect3>
  595. <sect3 id="coding-standards.inline-documentation.classes">
  596. <title>Sınıflar</title>
  597. <para>
  598. Her sınıf en az aşağıdaki kadar phpDocumentor tagleri içerecek şekilde bilgilendirme kısmı içermeli :
  599. <programlisting role="php"><![CDATA[
  600. /**
  601. * Sınıfın kısa açıklaması
  602. *
  603. * Sınıfın uzun açıklaması (eğer varsa)
  604. *
  605. * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
  606. * @license http://www.zend.com/license/3_0.txt PHP License 3.0
  607. * @version Release: @package_version@
  608. * @link http://dev.zend.com/package/PackageName
  609. * @since Class available since Release 1.2.0
  610. * @deprecated Class deprecated in Release 2.0.0
  611. */]]>
  612. </programlisting>
  613. </para>
  614. </sect3>
  615. <sect3 id="coding-standards.inline-documentation.functions">
  616. <title>Fonksiyonlar</title>
  617. <para>
  618. Her fonksiyon ,nesne methodları en az aşağıdaki gibi bilgilendirme kısmı içermeli:
  619. <itemizedlist>
  620. <listitem><para>Fonksiyonun açıklaması</para></listitem>
  621. <listitem><para>Tüm argümanlar</para></listitem>
  622. <listitem><para>Tüm olası dönüş değerleri</para></listitem>
  623. </itemizedlist>
  624. </para>
  625. <para>
  626. Fonksiyonun erişim seviyesi fonksiyon tanımlanırken "public","private" veya "protected" construct'ları ile
  627. tanımlandığı için "@access" taginin kullanılmasına gerek yoktur.
  628. </para>
  629. <para>
  630. Eğer fonksiyon/metod kural dışı durum(exception) fırlatabiliyorsa , @throws kullanın:
  631. <programlisting role="php"><![CDATA[
  632. @throws exceptionclass [açıklama]]]>
  633. </programlisting>
  634. </para>
  635. </sect3>
  636. </sect2>
  637. </sect1>
  638. </appendix>
  639. <!--
  640. vim:se ts=4 sw=4 et:
  641. -->