coding_standard.xml 35 KB

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