coding_standard.xml 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 21740 -->
  3. <!-- Reviewed: yes -->
  4. <appendix id="coding-standard">
  5. <title>Standardy kodowania Zend Framework</title>
  6. <sect1 id="coding-standard.overview">
  7. <title>Wstęp</title>
  8. <sect2 id="coding-standard.overview.scope">
  9. <title>Zakres</title>
  10. <para>
  11. Ten dokument określa wytyczne dla programistów i zespołów
  12. tworzących Zend Framework lub tworzących aplikacje w oparciu o
  13. Zend Framework. Wielu programistów używających Zend Framework
  14. uważa też za przydatne te standardy kodowania ponieważ dzięki nim
  15. ich styl kodowania pozostaje zgodny z całym kodem Zend Framework.
  16. Warto też zaznaczyć, że określenie standardów kodowaia wymaga
  17. znacznego wysiłku.
  18. Uwaga: Czasem programiści uważają, że trzymanie się standardu
  19. jest ważniejsze od samej treści i idei standardu. Przewodnik
  20. po standardach kodowania Zend Framework pokazuje
  21. najlepsze praktyki jakie mogą być stosowane w projekcie ZF.
  22. Możesz modyfikować te standardy lub użyć ich w takiej postaci w
  23. jakiej są, ale musisz to zrobić zgodnie z
  24. <ulink url="http://framework.zend.com/license">licencją</ulink>
  25. </para>
  26. <para>
  27. Do poruszonych tematów należą:
  28. <itemizedlist>
  29. <listitem>
  30. <para>Formatowanie plików PHP</para>
  31. </listitem>
  32. <listitem>
  33. <para>Konwencje nazewnictwa</para>
  34. </listitem>
  35. <listitem>
  36. <para>Styl kodowania</para>
  37. </listitem>
  38. <listitem>
  39. <para>Dokumentacja</para>
  40. </listitem>
  41. </itemizedlist>
  42. </para>
  43. </sect2>
  44. <sect2 id="coding-standard.overview.goals">
  45. <title>Cele</title>
  46. <para>
  47. Standardy kodowania są ważne w każdym projekcie
  48. programistycznym, a szczególnie gdy przy tym samym projekcie
  49. pracuje większa ilość programistów. Standardy
  50. kodowania pomagają zapewnić wysoką jakość kodu, mniejszą ilość
  51. błędów i łatwe zarządzanie.
  52. </para>
  53. </sect2>
  54. </sect1>
  55. <sect1 id="coding-standard.php-file-formatting">
  56. <title>Formatowanie plików PHP</title>
  57. <sect2 id="coding-standard.php-file-formatting.general">
  58. <title>Ogólnie</title>
  59. <para>
  60. Dla plików zawierających tylko kod PHP użycie znacznika
  61. zamykającego ("?>") jest niedozwolone. Znacznik ten nie jest
  62. wymagany przez PHP, a pominięcie go zapobiega przypadkowemu
  63. dołączeniu białych znaków do strumienia wyjściowego.
  64. </para>
  65. <para>
  66. <emphasis>WAŻNE:</emphasis> Dołączanie binarnych danych, na
  67. które pozwala funkcja <code>__HALT_COMPILER()</code> jest
  68. zabronione w plikach projektów Zend Framework oraz w plikach od nich
  69. pochodzących. Użycie tej funkcjonalności jest dozwolone tylko w
  70. specjalnych skryptach instalacyjnych.
  71. </para>
  72. </sect2>
  73. <sect2 id="coding-standard.php-file-formatting.indentation">
  74. <title>Wcięcie</title>
  75. <para>Wcięcia powinny składać się z 4 spacji. Znaki tabulatora są niedozwolone.</para>
  76. </sect2>
  77. <sect2 id="coding-standard.php-file-formatting.max-line-length">
  78. <title>Maksymalna długość linii</title>
  79. <para>
  80. Zalecana maksymalna długość linii wynosi 80 znaków, czyli
  81. programiści powinni starać się aby długość linii była bliska tej
  82. wartości jak to tylko możliwe. Jednak linie dłuższe są
  83. akceptowalne. Maksymalna długość linii zawierającej kod PHP
  84. wynosi 120 znaków.
  85. </para>
  86. </sect2>
  87. <sect2 id="coding-standard.php-file-formatting.line-termination">
  88. <title>Zakończenia linii</title>
  89. <para>
  90. Linie powinny być zakończone w standardowy sposób systemu Unix
  91. dla plików tekstowych. Linie powinny kończyć się tylko znakiem
  92. konca linii. Znaki końca linii są reprezentowane przez liczbę
  93. dziesiętną 10, lub szesnastkową 0x0A.
  94. </para>
  95. <para>
  96. Nie używaj znaku powrotu karetki (CR) tak jak to robią
  97. komputery z systemem Mac OS X (0x0D) lub kombinacji znaku powrotu
  98. karetki i końca linii (CRLF) tak jak to robią komputery z
  99. systemem Windows (0x0D, 0x0A).
  100. </para>
  101. </sect2>
  102. </sect1>
  103. <sect1 id="coding-standard.naming-conventions">
  104. <title>Konwencje nazewnictwa</title>
  105. <sect2 id="coding-standard.naming-conventions.classes">
  106. <title>Klasy</title>
  107. <para>
  108. Zend Framework używa takiej konwencji nazewnictwa, w której
  109. nazwy klas bezpośrednio odpowiadają katalogom, w których się
  110. znajdują. Głównym katalogiem standardowej biblioteki ZF jest
  111. katalog "Zend/", a głównym katalogiem dodatkowej
  112. biblioteki ZF jest katalog "ZendX". Wszystkie klasy Zend
  113. Framework są przechowywanie hierarchicznie w tych katalogach.
  114. </para>
  115. <para>
  116. Nazwy klas mogą zawierać tylko znaki alfanumeryczne. Liczby są
  117. dozwolone w nazwach klas, jednak ich użycie jest odradzane w
  118. większości przypadków. Użycie znaków podkreślenia jest dozwolone
  119. tylko w przypadku gdy są separatorami ścieżek; plik
  120. "Zend/Db/Table.php" musi odpowiadać nazwie klasy "Zend_Db_Table".
  121. </para>
  122. <para>
  123. Jeśli nazwa klasy składa się z więcej niż jednego słowa, pierwsza
  124. litera każdego kolejnego słowa powinna być wielka. Zapisanie
  125. wyrazów w całości wielkimi literami jest niedozwolone, przykładowo
  126. nazwa klasy "Zend_PDF" jest niedozwolona, a nazwa "Zend_Pdf"
  127. jest już akceptowalna.
  128. </para>
  129. <para>
  130. Te konwencje określają mechanizm pseudo-przestrzeni nazw dla
  131. Zend Framework. Zend Framework będzie używać funkcjonalności
  132. przestrzeni nazw PHP gdy będą już dostępne dla programistów do
  133. użycia w swoich aplikacjach.
  134. </para>
  135. <para>
  136. Zobacz nazwy klas znajdujące się w standardowej lub dodatkowej
  137. bibliotece aby zobaczyć przykłady konwencji nazewnictwa klas.
  138. <emphasis>WAŻNE:</emphasis> Kod który musi być rozwijany wraz
  139. bibliotekami ZF, a nie jest częścią standardowych lub dodatkowych
  140. bibliotek (np. kod aplikacji lub biblioteki nie rozpowszechniane
  141. przez firmę Zend) nigdy nie może zaczynać się przedrostkiem
  142. "Zend_" oraz "ZendX_".
  143. </para>
  144. </sect2>
  145. <sect2 id="coding-standard.naming-conventions.filenames">
  146. <title>Nazwy plików</title>
  147. <para>
  148. W nazwach innych plików dozwolone jest użycie jedynie znaków
  149. alfanumerycznych, znaków podkreślenia ("_") oraz myślnika ("-").
  150. Użycie spacji jest zabronione.
  151. </para>
  152. <para>
  153. Nazwa każdego pliku zawierającego jakikolwiek kod PHP powinna
  154. być zakończona rozszerzeniem ".php", nie dotyczy to skryptów
  155. widoków. Poniższe przykłady pokazują akceptowalne nazwy plików
  156. zawierających klasy Zend Framework:
  157. <programlisting role="php"><![CDATA[
  158. Zend/Db.php
  159. Zend/Controller/Front.php
  160. Zend/View/Helper/FormRadio.php
  161. ]]>
  162. </programlisting>
  163. Nazwy plików powinny odpowiadać nazwom klas, tak jak to pokazano
  164. powyżej.
  165. </para>
  166. </sect2>
  167. <sect2 id="coding-standard.naming-conventions.functions-and-methods">
  168. <title>Funkcje i metody</title>
  169. <para>
  170. Nazwy funkcji mogą zawierać tylko znaki alfanumeryczne. Znaki
  171. podkreślenia są niedozwolone. Użycie liczb w nazwach funkcji
  172. jest dozwolone, ale odradzane w większości przypadków.
  173. </para>
  174. <para>
  175. Nazwy funkcji zawsze muszą zaczynać się małą literą. Jeśli nazwa
  176. funkcji składa się z więcej niż jednego wyrazu, pierwsza litera
  177. każdego następnego wyrazu powinna być wielka. Jest to powszechnie
  178. zwane formatowaniem "camelCase".
  179. </para>
  180. <para>
  181. Zalecane jest dobieranie szczegółowych nazw funkcji. Powinny one
  182. być tak szczegółowe, jak to możliwe, aby w pełni opisać ich
  183. zachowanie i zastosowanie.
  184. </para>
  185. <para>
  186. Oto przykłady akceptowalnych nazw funkcji:
  187. <programlisting role="php"><![CDATA[
  188. filterInput()
  189. getElementById()
  190. widgetFactory()
  191. ]]>
  192. </programlisting>
  193. </para>
  194. <para>
  195. W programowaniu zorientowanym obiektowo metody dostępowe dla
  196. instancji lub statycznych zmiennych
  197. powinny zawsze zaczynać się od słów "get" lub "set".
  198. Jeśli implementujesz wzorzec projektowy, na przykład wzorzec "singleton"
  199. lub "factory", nazwa metody powinna zawierać nazwę wzorca, dzięki
  200. czemu wzorzec będzie można łatwo rozpoznać.
  201. </para>
  202. <para>
  203. Pierwszy znak w nazwach metod zadeklarowanych jako "private" lub
  204. "protected" musi być znakiem podkreślenia. Jest to jedyne
  205. akceptowalne użycie podkreślenia w nazwach metod. Metody
  206. zadeklarowane jako "public" nigdy nie powinny zawierać znaku
  207. podkreślenia.
  208. </para>
  209. <para>
  210. Definiowanie funkcji w przestrzeni globalnej (tzw. "latające funkcje")
  211. jest dozwolone, ale odradzane w większości przypadków. Zalecane
  212. jest, aby takie funkcje były ujęte w statycznej klasie.
  213. </para>
  214. </sect2>
  215. <sect2 id="coding-standard.naming-conventions.variables">
  216. <title>Zmienne</title>
  217. <para>
  218. Nazwy zmiennych mogą zawierać tylko znaki alfanumeryczne. Znaki
  219. podkreślenia są niedozwolone. Użycie liczb w nazwach zmiennych
  220. jest dozwolone, ale odradzane w większości przypadków.
  221. </para>
  222. <para>
  223. Nazwy zmiennych instancji, które są zadeklarowane używając modyfikatora
  224. "private" lub "protected", powinny zaczynać się od znaku
  225. podkreślenia. Jest to jedyny dozwolony przypadek użycia znaków
  226. podkreślenia w nazwach funkcji. Zmienne klas zadeklarowane jako
  227. "public" nie mogą nigdy zaczynac się od znaku podkreślenia.
  228. </para>
  229. <para>
  230. Tak jak nazwy funkcji (zobacz powyżej sekcję 3.3), nazwy
  231. zmiennych muszą się zawsze zaczynać małą literą i muszą być
  232. zgodne z metodą "camelCaps".
  233. </para>
  234. <para>
  235. Zalecane jest dobieranie szczegółowych nazw zmiennych. Powinny one
  236. być tak szczegółowe, jak to możliwe, aby w pełni opisać dane
  237. które programista wewnątrz nich przechowuje.
  238. Lakoniczne nazwy zmiennych takie jak "$i" czy "$n" są odradzane,
  239. ich użycie jest dopuszczalne tylko w kontekście najkrótszych
  240. pętli. Jeśli pętla zawiera więcej niż 20 linii kodu, nazwy
  241. indeksów powinny być bardziej opisowe.
  242. </para>
  243. </sect2>
  244. <sect2 id="coding-standard.naming-conventions.constants">
  245. <title>Stałe</title>
  246. <para>
  247. Nazwy stałych mogą zawierać znaki alfanumeryczne oraz znaki
  248. podkreślenia. Liczby są dozwolone w nazwach stałych.
  249. </para>
  250. <para>
  251. Nazwy stałych powinny składać się tylko z wielkich liter.
  252. </para>
  253. <para>
  254. Aby zwiększyć czytelność, słowa w nazwach stałych muszą być
  255. oddzielone znakiem podkreślenia. Na przykład, nazwa stałej
  256. <code>EMBED_SUPPRESS_EMBED_EXCEPTION</code> jest dozwolona, a
  257. nazwa <code>EMBED_SUPPRESSEMBEDEXCEPTION</code> nie jest.
  258. </para>
  259. <para>
  260. Stałe muszą być definiowane jako stałe klas przez użycie
  261. konstrukcji "const". Definiowanie stałych w przestrzeni
  262. globalnej za pomocą konstrukcji "define" jest dozwolone, ale
  263. odradzane.
  264. </para>
  265. </sect2>
  266. </sect1>
  267. <sect1 id="coding-standard.coding-style">
  268. <title>Styl kodowania</title>
  269. <sect2 id="coding-standard.coding-style.php-code-demarcation">
  270. <title>Odgraniczanie kodu PHP</title>
  271. <para>
  272. Kod PHP musi być zawsze odgraniczony za pomocą pełnych,
  273. standardowych znaczników PHP:
  274. <programlisting role="php"><![CDATA[
  275. <?php
  276. ?>
  277. ]]>
  278. </programlisting>
  279. </para>
  280. <para>
  281. Użycie skróconej wersji znaczników jest niedozwolone. Pliki,
  282. które zawierają tylko kod PHP, nie powinny nigdy być zakończone
  283. znacznikiem zamykającym (Zobacz
  284. <xref linkend="coding-standard.php-file-formatting.general" />).
  285. </para>
  286. </sect2>
  287. <sect2 id="coding-standard.coding-style.strings">
  288. <title>Łańcuchy znaków</title>
  289. <sect3 id="coding-standard.coding-style.strings.literals">
  290. <title>Proste łańcuchy znaków</title>
  291. <para>
  292. Kiedy łańcuch znaków jest prosty (nie zawiera podstawienia
  293. zmiennych), do jego odgraniczenia powinien zostać użyty
  294. pojedynczy cudzysłów (apostrof):
  295. <programlisting role="php"><![CDATA[
  296. $a = 'Example String';
  297. ]]>
  298. </programlisting>
  299. </para>
  300. </sect3>
  301. <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
  302. <title>Proste łańcuchy znaków zawierające apostrofy</title>
  303. <para>
  304. Kiedy prosty łańcuch znaków zawiera wewnątrz apostrofy,
  305. dozwolone jest odgraniczenie łańcucha za pomocą cudzysłowów
  306. (podwójnych). Jest to szczególnie przydatne w wyrażeniach SQL:
  307. <programlisting role="php"><![CDATA[
  308. $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
  309. ]]>
  310. </programlisting>
  311. Ta składnia jest zalecana w przeciwieństwie do zabezpieczenia
  312. apostrofów znakami ukośnika.
  313. </para>
  314. </sect3>
  315. <sect3 id="coding-standard.coding-style.strings.variable-substitution">
  316. <title>Podstawienia zmiennych</title>
  317. <para>
  318. Podstawienia zmiennych są dozwolone na dwa sposoby:
  319. <programlisting role="php"><![CDATA[
  320. $greeting = "Hello $name, welcome back!";
  321. $greeting = "Hello {$name}, welcome back!";
  322. ]]>
  323. </programlisting>
  324. </para>
  325. <para>
  326. Dla zachowania spójności, taka forma jest niedozwolona:
  327. <programlisting role="php"><![CDATA[
  328. $greeting = "Hello ${name}, welcome back!";
  329. ]]>
  330. </programlisting>
  331. </para>
  332. </sect3>
  333. <sect3 id="coding-standard.coding-style.strings.string-concatenation">
  334. <title>Łączenie łańcuchów znaków</title>
  335. <para>
  336. Łańcuchy znaków mogą być łączone za pomocą operatora ".".
  337. Przed i za znakiem "." zawsze powinniśmy dodać znak odstępu:
  338. <programlisting role="php"><![CDATA[
  339. $company = 'Zend' . 'Technologies';
  340. ]]>
  341. </programlisting>
  342. </para>
  343. <para>
  344. Kiedy łączymy łańcuchy znaków za pomocą operatora ".",
  345. zalecane jest podzielenie wyrażenia na wiele linii w celu
  346. zwiększenia czytelności. W takich przypadkach, każda
  347. linia powinna być wcięta za pomocą znaków odstępu aby
  348. wszystkie operatory "." leżały w jednej linii pod znakiem "=":
  349. <programlisting role="php"><![CDATA[
  350. $sql = "SELECT `id`, `name` FROM `people` "
  351. . "WHERE `name` = 'Susan' "
  352. . "ORDER BY `name` ASC ";
  353. ]]>
  354. </programlisting>
  355. </para>
  356. </sect3>
  357. </sect2>
  358. <sect2 id="coding-standard.coding-style.arrays">
  359. <title>Tablice</title>
  360. <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
  361. <title>Tablice indeksowane numerycznie</title>
  362. <para>Niedozwolone jest użycie ujemnych liczb jako indeksów tabel.</para>
  363. <para>
  364. Indeksowana tablica powinna zaczynać się od nieujemnej
  365. liczby, jednak liczby inne niż 0 jako pierwszy indeks są
  366. odradzane.
  367. </para>
  368. <para>
  369. Kiedy deklarujesz indeksowaną numerycznie tablicę za pomocą
  370. funkcji <code>array</code>, powinieneś dodać znak
  371. odstępu po każdym przecinku w celu zwiększenia czytelności:
  372. <programlisting role="php"><![CDATA[
  373. $sampleArray = array(1, 2, 3, 'Zend', 'Studio');
  374. ]]>
  375. </programlisting>
  376. </para>
  377. <para>
  378. Dozwolone jest deklarowanie tablic indeksowanych
  379. numerycznie w wielu wierszach używając konstrukcji "array".
  380. W takim przypadku, każdy następny wiersz musi być dopełniony,
  381. znakami odstępu aby początki wierszy były wyrównane:
  382. <programlisting role="php"><![CDATA[
  383. $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
  384. $a, $b, $c,
  385. 56.44, $d, 500);
  386. ]]>
  387. </programlisting>
  388. </para>
  389. </sect3>
  390. <sect3 id="coding-standard.coding-style.arrays.associative">
  391. <title>Tablice asocjacyjne</title>
  392. <para>
  393. Kiedy deklarujesz tablice asocjacyjne za pomocą konstrukcji
  394. <code>array</code> zalecane jest rozbicie wyrażenia na wiele
  395. wierszy. W takim przypadku każdy następny wiersz powinien
  396. być dopełniony znakami odstępu, aby klucze i wartości były
  397. wyrównane:
  398. <programlisting role="php"><![CDATA[
  399. $sampleArray = array('firstKey' => 'firstValue',
  400. 'secondKey' => 'secondValue');
  401. ]]>
  402. </programlisting>
  403. </para>
  404. </sect3>
  405. </sect2>
  406. <sect2 id="coding-standard.coding-style.classes">
  407. <title>Klasy</title>
  408. <sect3 id="coding-standard.coding-style.classes.declaration">
  409. <title>Deklaracja klas</title>
  410. <para>
  411. Klasy powinny być nazywane zgodnie z konwencjami Zend Framework.
  412. </para><para>
  413. Klamra otwierająca klasę powinna zawsze znajdować się w linii
  414. pod nazwą klasy (styl "one true brace").
  415. </para><para>
  416. Każda klasa musi posiadać blok dokumentacji zgodny ze
  417. standardem PHPDocumentor.
  418. </para><para>
  419. Każdy kod wewnątrz klasy musi być wcięty na cztery spacje.
  420. </para><para>
  421. Tylko jedna klasa dozwolona jest w jednym pliku PHP.
  422. </para><para>
  423. Umieszczanie dodatkowego kodu w pliku klasy jest dozwolone,
  424. ale odradzane. W takich plikach dwie puste linie muszą
  425. oddzielać kod klasy od dodatkowego kodu PHP w pliku.
  426. </para><para>
  427. Oto przykład poprawnej deklaracji klasy:
  428. <programlisting role="php"><![CDATA[
  429. /**
  430. * Blok dokumentacji
  431. */
  432. class SampleClass
  433. {
  434. // cała zawartość klasy musi
  435. // być wcięta na cztery spacje
  436. }
  437. ]]>
  438. </programlisting>
  439. </para>
  440. </sect3>
  441. <sect3 id="coding-standard.coding-style.classes.member-variables">
  442. <title>Zmienne klas</title>
  443. <para>
  444. Zmienne klas powinny być nazywane zgodnie z poniższymi konwencjami.
  445. </para>
  446. <para>
  447. Wszystkie zmienne muszą być deklarowane na samym początku
  448. klasy, przed zadeklarowaniem jakichkolwiek funkcji.
  449. </para>
  450. <para>
  451. Użycie konstrukcji <code>var</code> jest niedozwolone.
  452. Zawsze deklarujemy widoczność zmiennych klas za pomocą jednej
  453. z konstrukcji: <code>private</code>, <code>protected</code>, lub
  454. <code>public</code>.
  455. Uzyskiwanie dostępu do zmiennych klas bezpośrednio poprzez
  456. ustawienie ich jako publicznych jest dozwolone, ale odradzane
  457. na rzecz metod dostępowych (set/get).
  458. </para>
  459. </sect3>
  460. </sect2>
  461. <sect2 id="coding-standard.coding-style.functions-and-methods">
  462. <title>Funkcje i metody</title>
  463. <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
  464. <title>Deklaracja funkcji oraz metod</title>
  465. <para>
  466. Funkcje powinny być nazywane zgodnie z poniższymi konwencjami.
  467. </para>
  468. <para>
  469. Funkcje wewnątrz klas zawsze muszą mieć zadeklarowaną
  470. dostępność za pomocą konstrukcji <code>private</code>,
  471. <code>protected</code>, lub <code>public</code>.
  472. </para>
  473. <para>
  474. Tak jak w klasach, klamra otwierająca powinna zawsze znajdować
  475. się w linii pod nazwą funkcji (styl "one true brace").
  476. Nie powinno być odstępu między nazwą funkcji a otwierającym
  477. nawiasem argumentów.
  478. </para>
  479. <para>
  480. Deklarowanie funkcji w przestrzeni globalnej jest odradzane.
  481. </para>
  482. <para>
  483. Oto przykład poprawnej deklaracji funkcji w klasie:
  484. <programlisting role="php"><![CDATA[
  485. /**
  486. * Blok dokumentacji
  487. */
  488. class Foo
  489. {
  490. /**
  491. * Blok dokumentacji
  492. */
  493. public function bar()
  494. {
  495. // cała zawartość funkcji musi
  496. // być wcięta na cztery spacje
  497. }
  498. }
  499. ]]>
  500. </programlisting>
  501. </para>
  502. <para>
  503. <emphasis>UWAGA:</emphasis> Przekazywanie przez referencję
  504. dozwolone jest tylko podczas deklaracji funkcji:
  505. <programlisting role="php"><![CDATA[
  506. /**
  507. * Blok dokumentacji
  508. */
  509. class Foo
  510. {
  511. /**
  512. * Blok dokumentacji
  513. */
  514. public function bar(&$baz)
  515. {}
  516. }
  517. ]]>
  518. </programlisting>
  519. </para>
  520. <para>
  521. Przekazywanie przez referencję podczas wywołania jest zabronione.
  522. </para>
  523. <para>
  524. Zwracana wartość nie może być objęta cudzysłowami. To mogłoby
  525. zmniejszyć czytelność kodu i może spowodować, że przestanie
  526. on działać, jeśli metoda w przyszłości będzie zwracać
  527. referencję.
  528. <programlisting role="php"><![CDATA[
  529. /**
  530. * Blok dokumentacji
  531. */
  532. class Foo
  533. {
  534. /**
  535. * ŹLE
  536. */
  537. public function bar()
  538. {
  539. return($this->bar);
  540. }
  541. /**
  542. * DOBRZE
  543. */
  544. public function bar()
  545. {
  546. return $this->bar;
  547. }
  548. }
  549. ]]>
  550. </programlisting>
  551. </para>
  552. </sect3>
  553. <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
  554. <title>Użycie funkcji oraz metod</title>
  555. <para>
  556. Argumenty funkcji powinny być oddzielone jednym znakiem
  557. odstępu po przecinku. To jest przykład poprawnego wywołania
  558. funkcji przyjmującej trzy argumenty:
  559. <programlisting role="php"><![CDATA[
  560. threeArguments(1, 2, 3);
  561. ]]>
  562. </programlisting>
  563. </para>
  564. <para>
  565. Przekazywanie przez referencję w czasie wywołania jest
  566. zabronione. Zobacz sekcję opisującą sposób deklaracji
  567. funkcji, aby poznać prawidłowy sposób przekazywania
  568. argumentów przez referencję.
  569. </para>
  570. <para>
  571. Funkcje które przyjmują tablice jako argumenty, mogą zawierać
  572. konstrukcję "array" i mogą być rozdzielone na wiele linii
  573. w celu zwiększenia czytelności. W tych przypadkach wciąż
  574. obowiązuje standard dla tablic:
  575. <programlisting role="php"><![CDATA[
  576. threeArguments(array(1, 2, 3), 2, 3);
  577. threeArguments(array(1, 2, 3, 'Zend', 'Studio',
  578. $a, $b, $c,
  579. 56.44, $d, 500), 2, 3);
  580. ]]>
  581. </programlisting>
  582. </para>
  583. </sect3>
  584. </sect2>
  585. <sect2 id="coding-standard.coding-style.control-statements">
  586. <title>Instrukcje kontrolne</title>
  587. <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
  588. <title>If/Else/Elseif</title>
  589. <para>
  590. Wyrażenia kontrolne oparte o konstrukcje <code>if</code>
  591. oraz <code>elseif</code> muszą posiadać jeden znak odstępu
  592. przed nawiasem otwierającym warunek i jeden znak odstępu za
  593. nawiasem zamykającym.
  594. </para>
  595. <para>
  596. Instrukcje warunkowe znajdujące się pomiędzy nawiasami muszą
  597. być odgraniczone znakami odstępu. Do grupowania większych
  598. warunków zalecane jest użycie dodatkowych nawiasów.
  599. </para>
  600. <para>
  601. Klamrowy nawias otwierający powinien znajdować się w tej
  602. samej linii co warunek. Nawias zamykający zawsze powinien
  603. znajdować się w osobnej nowej linii. Zawartość znajdująca
  604. się między nawiasami klamrowymi musi być wcięta za pomocą
  605. czterech znaków odstępu.
  606. <programlisting role="php"><![CDATA[
  607. if ($a != 2) {
  608. $a = 2;
  609. }
  610. ]]>
  611. </programlisting>
  612. </para>
  613. <para>
  614. Formatowanie instrukcji "if", które zawierają instrukcję
  615. "elseif" lub "else", powinno wyglądać tak jak w poniższym
  616. przykładzie:
  617. <programlisting role="php"><![CDATA[
  618. if ($a != 2) {
  619. $a = 2;
  620. } else {
  621. $a = 7;
  622. }
  623. if ($a != 2) {
  624. $a = 2;
  625. } elseif ($a == 3) {
  626. $a = 4;
  627. } else {
  628. $a = 7;
  629. }
  630. ]]>
  631. </programlisting>
  632. W pewnych okolicznościach PHP pozwala na zapisanie tych
  633. wyrażeń bez nawiasów. Standard kodowania wymaga, aby
  634. wszystkie wyrażenia "if", "elseif" oraz "else" używały
  635. nawiasów.
  636. </para>
  637. <para>
  638. Użycie instrukcji "elseif" jest dozwolone ale mocno
  639. odradzane. Zamiast tej instrukcji zalecane jest użycie
  640. kombinacji "else if".
  641. </para>
  642. </sect3>
  643. <sect3 id="coding-standards.coding-style.control-statements.switch">
  644. <title>Instrukcja Switch</title>
  645. <para>
  646. Instrukcje kontrolne umieszczone wewnątrz instrukcji "switch"
  647. muszą posiadać pojedynczy znak odstępu zarówno przed nawiasem
  648. jak i za nim.
  649. </para>
  650. <para>
  651. Cała zawartość wewnątrz instrukcji "switch" musi być wcięta
  652. na cztery spacje. Zawartość każdej instrukcji "case" musi
  653. być wcięta na kolejne cztery spacje.
  654. </para>
  655. <programlisting role="php"><![CDATA[
  656. switch ($numPeople) {
  657. case 1:
  658. break;
  659. case 2:
  660. break;
  661. default:
  662. break;
  663. }
  664. ]]>
  665. </programlisting>
  666. <para>
  667. Konstrukcja <code>default</code> powinna zawsze znaleźć się
  668. wewnątrz konstrukcji <code>switch</code>.
  669. </para>
  670. <para>
  671. <emphasis>UWAGA:</emphasis> W niektórych przypadkach przydatne
  672. jest zapisanie jednej klauzuli <code>case</code>, po której
  673. sterowanie powinno przejść do następnej klauzuli <code>case</code>
  674. poprzez nie umieszczanie polecenia <code>break</code> lub
  675. <code>return</code> w wyjściowym <code>case</code>.
  676. Aby odróżnić takie sytuacje od niezamierzonych błędów,
  677. wszystkie instrukcje <code>case</code> których intencjonalnie
  678. pozbawiono <code>break</code> lub <code>return</code> muszą
  679. zawierać komentarz: "// break intentionally omitted".
  680. </para>
  681. </sect3>
  682. </sect2>
  683. <sect2 id="coding-standards.inline-documentation">
  684. <title>Dokumentacja</title>
  685. <sect3 id="coding-standards.inline-documentation.documentation-format">
  686. <title>Format dokumentacji</title>
  687. <para>
  688. Wszystkie bloki dokumentacji muszą być kompatybilne z
  689. formatem phpDocumentor. Opisywanie formatu phpDocumentor
  690. jest poza zakresem tego dokumentu. Aby uzyskać więcej
  691. informacji, odwiedź: <ulink url="http://phpdoc.org/">http://phpdoc.org/</ulink>
  692. </para>
  693. <para>
  694. Każdy plik źródłowy napisany dla Zend Framework lub działający
  695. w oparciu o framework musi posiadać na początku pliku ogólny
  696. blok dokumentacji dla danego pliku oraz blok dokumentacji dla
  697. klasy bezpośrednio przed jej deklaracją. Poniżej są przykłady
  698. takich bloków:
  699. </para>
  700. </sect3>
  701. <sect3 id="coding-standards.inline-documentation.files">
  702. <title>Pliki</title>
  703. <para>
  704. Każdy plik zawierający kod PHP musi na samym początku
  705. posiadać blok dokumentacji zawierający przynajmniej
  706. następujące znaczniki standardu phpDocumentor:
  707. <programlisting role="php"><![CDATA[
  708. /**
  709. * Short description for file
  710. *
  711. * Long description for file (if any)...
  712. *
  713. * LICENSE: Some license information
  714. *
  715. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  716. * @license http://framework.zend.com/license BSD License
  717. * @version $Id:$
  718. * @link http://framework.zend.com/package/PackageName
  719. * @since File available since Release 1.5.0
  720. */
  721. ]]>
  722. </programlisting>
  723. </para>
  724. </sect3>
  725. <sect3 id="coding-standards.inline-documentation.classes">
  726. <title>Klasy</title>
  727. <para>
  728. Każda klasa musi posiadać blok dokumentacji zawierający
  729. przynajmniej następujące znaczniki standardu phpDocumentor:
  730. <programlisting role="php"><![CDATA[
  731. /**
  732. * Short description for class
  733. *
  734. * Long description for class (if any)...
  735. *
  736. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  737. * @license http://framework.zend.com/license BSD License
  738. * @version Release: @package_version@
  739. * @link http://framework.zend.com/package/PackageName
  740. * @since Class available since Release 1.5.0
  741. * @deprecated Class deprecated in Release 2.0.0
  742. */
  743. ]]>
  744. </programlisting>
  745. </para>
  746. </sect3>
  747. <sect3 id="coding-standards.inline-documentation.functions">
  748. <title>Funkcje</title>
  749. <para>
  750. Każda funkcja, a także metoda obiektu, musi posiadać blok
  751. dokumentacji zawierający przynajmniej następujące znaczniki
  752. standardu phpDocumentor:
  753. <itemizedlist>
  754. <listitem><para>Opis funkcji</para></listitem>
  755. <listitem><para>Opis wszystkich argumentów</para></listitem>
  756. <listitem><para>Opis wszystkich możliwych zwracanych wartości</para></listitem>
  757. </itemizedlist>
  758. </para>
  759. <para>
  760. Nie jest konieczne użycie znacznika "@access" ponieważ
  761. poziom dostępu jest znany dzięki konstrukcji "public",
  762. "private", lub "protected" użytej podczas deklaracji
  763. funkcji.
  764. </para>
  765. <para>
  766. Jeśli funkcja/metoda może wyrzucać wyjątek, użyj znacznika
  767. "@throws":
  768. <programlisting role="php"><![CDATA[
  769. @throws exceptionclass [opis wyjątku]
  770. ]]>
  771. </programlisting>
  772. </para>
  773. </sect3>
  774. </sect2>
  775. </sect1>
  776. </appendix>