| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 21740 -->
- <!-- Reviewed: yes -->
- <appendix id="coding-standard">
- <title>Standardy kodowania Zend Framework</title>
- <sect1 id="coding-standard.overview">
- <title>Wstęp</title>
- <sect2 id="coding-standard.overview.scope">
- <title>Zakres</title>
- <para>
- Ten dokument określa wytyczne dla programistów i zespołów
- tworzących Zend Framework lub tworzących aplikacje w oparciu o
- Zend Framework. Wielu programistów używających Zend Framework
- uważa też za przydatne te standardy kodowania ponieważ dzięki nim
- ich styl kodowania pozostaje zgodny z całym kodem Zend Framework.
- Warto też zaznaczyć, że określenie standardów kodowaia wymaga
- znacznego wysiłku.
- Uwaga: Czasem programiści uważają, że trzymanie się standardu
- jest ważniejsze od samej treści i idei standardu. Przewodnik
- po standardach kodowania Zend Framework pokazuje
- najlepsze praktyki jakie mogą być stosowane w projekcie ZF.
- Możesz modyfikować te standardy lub użyć ich w takiej postaci w
- jakiej są, ale musisz to zrobić zgodnie z
- <ulink url="http://framework.zend.com/license">licencją</ulink>
- </para>
- <para>
- Do poruszonych tematów należą:
- <itemizedlist>
- <listitem>
- <para>Formatowanie plików PHP</para>
- </listitem>
- <listitem>
- <para>Konwencje nazewnictwa</para>
- </listitem>
- <listitem>
- <para>Styl kodowania</para>
- </listitem>
- <listitem>
- <para>Dokumentacja</para>
- </listitem>
- </itemizedlist>
- </para>
- </sect2>
- <sect2 id="coding-standard.overview.goals">
- <title>Cele</title>
- <para>
- Standardy kodowania są ważne w każdym projekcie
- programistycznym, a szczególnie gdy przy tym samym projekcie
- pracuje większa ilość programistów. Standardy
- kodowania pomagają zapewnić wysoką jakość kodu, mniejszą ilość
- błędów i łatwe zarządzanie.
- </para>
- </sect2>
- </sect1>
- <sect1 id="coding-standard.php-file-formatting">
- <title>Formatowanie plików PHP</title>
- <sect2 id="coding-standard.php-file-formatting.general">
- <title>Ogólnie</title>
- <para>
- Dla plików zawierających tylko kod PHP użycie znacznika
- zamykającego ("?>") jest niedozwolone. Znacznik ten nie jest
- wymagany przez PHP, a pominięcie go zapobiega przypadkowemu
- dołączeniu białych znaków do strumienia wyjściowego.
- </para>
- <para>
- <emphasis>WAŻNE:</emphasis> Dołączanie binarnych danych, na
- które pozwala funkcja <code>__HALT_COMPILER()</code> jest
- zabronione w plikach projektów Zend Framework oraz w plikach od nich
- pochodzących. Użycie tej funkcjonalności jest dozwolone tylko w
- specjalnych skryptach instalacyjnych.
- </para>
- </sect2>
- <sect2 id="coding-standard.php-file-formatting.indentation">
- <title>Wcięcie</title>
- <para>Wcięcia powinny składać się z 4 spacji. Znaki tabulatora są niedozwolone.</para>
- </sect2>
- <sect2 id="coding-standard.php-file-formatting.max-line-length">
- <title>Maksymalna długość linii</title>
- <para>
- Zalecana maksymalna długość linii wynosi 80 znaków, czyli
- programiści powinni starać się aby długość linii była bliska tej
- wartości jak to tylko możliwe. Jednak linie dłuższe są
- akceptowalne. Maksymalna długość linii zawierającej kod PHP
- wynosi 120 znaków.
- </para>
- </sect2>
- <sect2 id="coding-standard.php-file-formatting.line-termination">
- <title>Zakończenia linii</title>
- <para>
- Linie powinny być zakończone w standardowy sposób systemu Unix
- dla plików tekstowych. Linie powinny kończyć się tylko znakiem
- konca linii. Znaki końca linii są reprezentowane przez liczbę
- dziesiętną 10, lub szesnastkową 0x0A.
- </para>
- <para>
- Nie używaj znaku powrotu karetki (CR) tak jak to robią
- komputery z systemem Mac OS X (0x0D) lub kombinacji znaku powrotu
- karetki i końca linii (CRLF) tak jak to robią komputery z
- systemem Windows (0x0D, 0x0A).
- </para>
- </sect2>
- </sect1>
- <sect1 id="coding-standard.naming-conventions">
- <title>Konwencje nazewnictwa</title>
- <sect2 id="coding-standard.naming-conventions.classes">
- <title>Klasy</title>
- <para>
- Zend Framework używa takiej konwencji nazewnictwa, w której
- nazwy klas bezpośrednio odpowiadają katalogom, w których się
- znajdują. Głównym katalogiem standardowej biblioteki ZF jest
- katalog "Zend/", a głównym katalogiem dodatkowej
- biblioteki ZF jest katalog "ZendX". Wszystkie klasy Zend
- Framework są przechowywanie hierarchicznie w tych katalogach.
- </para>
- <para>
- Nazwy klas mogą zawierać tylko znaki alfanumeryczne. Liczby są
- dozwolone w nazwach klas, jednak ich użycie jest odradzane w
- większości przypadków. Użycie znaków podkreślenia jest dozwolone
- tylko w przypadku gdy są separatorami ścieżek; plik
- "Zend/Db/Table.php" musi odpowiadać nazwie klasy "Zend_Db_Table".
- </para>
- <para>
- Jeśli nazwa klasy składa się z więcej niż jednego słowa, pierwsza
- litera każdego kolejnego słowa powinna być wielka. Zapisanie
- wyrazów w całości wielkimi literami jest niedozwolone, przykładowo
- nazwa klasy "Zend_PDF" jest niedozwolona, a nazwa "Zend_Pdf"
- jest już akceptowalna.
- </para>
- <para>
- Te konwencje określają mechanizm pseudo-przestrzeni nazw dla
- Zend Framework. Zend Framework będzie używać funkcjonalności
- przestrzeni nazw PHP gdy będą już dostępne dla programistów do
- użycia w swoich aplikacjach.
- </para>
- <para>
- Zobacz nazwy klas znajdujące się w standardowej lub dodatkowej
- bibliotece aby zobaczyć przykłady konwencji nazewnictwa klas.
- <emphasis>WAŻNE:</emphasis> Kod który musi być rozwijany wraz
- bibliotekami ZF, a nie jest częścią standardowych lub dodatkowych
- bibliotek (np. kod aplikacji lub biblioteki nie rozpowszechniane
- przez firmę Zend) nigdy nie może zaczynać się przedrostkiem
- "Zend_" oraz "ZendX_".
- </para>
- </sect2>
- <sect2 id="coding-standard.naming-conventions.filenames">
- <title>Nazwy plików</title>
- <para>
- W nazwach innych plików dozwolone jest użycie jedynie znaków
- alfanumerycznych, znaków podkreślenia ("_") oraz myślnika ("-").
- Użycie spacji jest zabronione.
- </para>
- <para>
- Nazwa każdego pliku zawierającego jakikolwiek kod PHP powinna
- być zakończona rozszerzeniem ".php", nie dotyczy to skryptów
- widoków. Poniższe przykłady pokazują akceptowalne nazwy plików
- zawierających klasy Zend Framework:
- <programlisting role="php"><![CDATA[
- Zend/Db.php
- Zend/Controller/Front.php
- Zend/View/Helper/FormRadio.php
- ]]>
- </programlisting>
- Nazwy plików powinny odpowiadać nazwom klas, tak jak to pokazano
- powyżej.
- </para>
- </sect2>
- <sect2 id="coding-standard.naming-conventions.functions-and-methods">
- <title>Funkcje i metody</title>
- <para>
- Nazwy funkcji mogą zawierać tylko znaki alfanumeryczne. Znaki
- podkreślenia są niedozwolone. Użycie liczb w nazwach funkcji
- jest dozwolone, ale odradzane w większości przypadków.
- </para>
- <para>
- Nazwy funkcji zawsze muszą zaczynać się małą literą. Jeśli nazwa
- funkcji składa się z więcej niż jednego wyrazu, pierwsza litera
- każdego następnego wyrazu powinna być wielka. Jest to powszechnie
- zwane formatowaniem "camelCase".
- </para>
- <para>
- Zalecane jest dobieranie szczegółowych nazw funkcji. Powinny one
- być tak szczegółowe, jak to możliwe, aby w pełni opisać ich
- zachowanie i zastosowanie.
- </para>
- <para>
- Oto przykłady akceptowalnych nazw funkcji:
- <programlisting role="php"><![CDATA[
- filterInput()
- getElementById()
- widgetFactory()
- ]]>
- </programlisting>
- </para>
- <para>
- W programowaniu zorientowanym obiektowo metody dostępowe dla
- instancji lub statycznych zmiennych
- powinny zawsze zaczynać się od słów "get" lub "set".
- Jeśli implementujesz wzorzec projektowy, na przykład wzorzec "singleton"
- lub "factory", nazwa metody powinna zawierać nazwę wzorca, dzięki
- czemu wzorzec będzie można łatwo rozpoznać.
- </para>
- <para>
- Pierwszy znak w nazwach metod zadeklarowanych jako "private" lub
- "protected" musi być znakiem podkreślenia. Jest to jedyne
- akceptowalne użycie podkreślenia w nazwach metod. Metody
- zadeklarowane jako "public" nigdy nie powinny zawierać znaku
- podkreślenia.
- </para>
- <para>
- Definiowanie funkcji w przestrzeni globalnej (tzw. "latające funkcje")
- jest dozwolone, ale odradzane w większości przypadków. Zalecane
- jest, aby takie funkcje były ujęte w statycznej klasie.
- </para>
- </sect2>
- <sect2 id="coding-standard.naming-conventions.variables">
- <title>Zmienne</title>
- <para>
- Nazwy zmiennych mogą zawierać tylko znaki alfanumeryczne. Znaki
- podkreślenia są niedozwolone. Użycie liczb w nazwach zmiennych
- jest dozwolone, ale odradzane w większości przypadków.
- </para>
- <para>
- Nazwy zmiennych instancji, które są zadeklarowane używając modyfikatora
- "private" lub "protected", powinny zaczynać się od znaku
- podkreślenia. Jest to jedyny dozwolony przypadek użycia znaków
- podkreślenia w nazwach funkcji. Zmienne klas zadeklarowane jako
- "public" nie mogą nigdy zaczynac się od znaku podkreślenia.
- </para>
- <para>
- Tak jak nazwy funkcji (zobacz powyżej sekcję 3.3), nazwy
- zmiennych muszą się zawsze zaczynać małą literą i muszą być
- zgodne z metodą "camelCaps".
- </para>
- <para>
- Zalecane jest dobieranie szczegółowych nazw zmiennych. Powinny one
- być tak szczegółowe, jak to możliwe, aby w pełni opisać dane
- które programista wewnątrz nich przechowuje.
- Lakoniczne nazwy zmiennych takie jak "$i" czy "$n" są odradzane,
- ich użycie jest dopuszczalne tylko w kontekście najkrótszych
- pętli. Jeśli pętla zawiera więcej niż 20 linii kodu, nazwy
- indeksów powinny być bardziej opisowe.
- </para>
- </sect2>
- <sect2 id="coding-standard.naming-conventions.constants">
- <title>Stałe</title>
- <para>
- Nazwy stałych mogą zawierać znaki alfanumeryczne oraz znaki
- podkreślenia. Liczby są dozwolone w nazwach stałych.
- </para>
- <para>
- Nazwy stałych powinny składać się tylko z wielkich liter.
- </para>
- <para>
- Aby zwiększyć czytelność, słowa w nazwach stałych muszą być
- oddzielone znakiem podkreślenia. Na przykład, nazwa stałej
- <code>EMBED_SUPPRESS_EMBED_EXCEPTION</code> jest dozwolona, a
- nazwa <code>EMBED_SUPPRESSEMBEDEXCEPTION</code> nie jest.
- </para>
- <para>
- Stałe muszą być definiowane jako stałe klas przez użycie
- konstrukcji "const". Definiowanie stałych w przestrzeni
- globalnej za pomocą konstrukcji "define" jest dozwolone, ale
- odradzane.
- </para>
- </sect2>
- </sect1>
- <sect1 id="coding-standard.coding-style">
- <title>Styl kodowania</title>
- <sect2 id="coding-standard.coding-style.php-code-demarcation">
- <title>Odgraniczanie kodu PHP</title>
- <para>
- Kod PHP musi być zawsze odgraniczony za pomocą pełnych,
- standardowych znaczników PHP:
- <programlisting role="php"><![CDATA[
- <?php
- ?>
- ]]>
- </programlisting>
- </para>
- <para>
- Użycie skróconej wersji znaczników jest niedozwolone. Pliki,
- które zawierają tylko kod PHP, nie powinny nigdy być zakończone
- znacznikiem zamykającym (Zobacz
- <xref linkend="coding-standard.php-file-formatting.general" />).
- </para>
- </sect2>
- <sect2 id="coding-standard.coding-style.strings">
- <title>Łańcuchy znaków</title>
- <sect3 id="coding-standard.coding-style.strings.literals">
- <title>Proste łańcuchy znaków</title>
- <para>
- Kiedy łańcuch znaków jest prosty (nie zawiera podstawienia
- zmiennych), do jego odgraniczenia powinien zostać użyty
- pojedynczy cudzysłów (apostrof):
- <programlisting role="php"><![CDATA[
- $a = 'Example String';
- ]]>
- </programlisting>
- </para>
- </sect3>
- <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
- <title>Proste łańcuchy znaków zawierające apostrofy</title>
- <para>
- Kiedy prosty łańcuch znaków zawiera wewnątrz apostrofy,
- dozwolone jest odgraniczenie łańcucha za pomocą cudzysłowów
- (podwójnych). Jest to szczególnie przydatne w wyrażeniach SQL:
- <programlisting role="php"><![CDATA[
- $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
- ]]>
- </programlisting>
- Ta składnia jest zalecana w przeciwieństwie do zabezpieczenia
- apostrofów znakami ukośnika.
- </para>
- </sect3>
- <sect3 id="coding-standard.coding-style.strings.variable-substitution">
- <title>Podstawienia zmiennych</title>
- <para>
- Podstawienia zmiennych są dozwolone na dwa sposoby:
- <programlisting role="php"><![CDATA[
- $greeting = "Hello $name, welcome back!";
- $greeting = "Hello {$name}, welcome back!";
- ]]>
- </programlisting>
- </para>
- <para>
- Dla zachowania spójności, taka forma jest niedozwolona:
- <programlisting role="php"><![CDATA[
- $greeting = "Hello ${name}, welcome back!";
- ]]>
- </programlisting>
- </para>
- </sect3>
- <sect3 id="coding-standard.coding-style.strings.string-concatenation">
- <title>Łączenie łańcuchów znaków</title>
- <para>
- Łańcuchy znaków mogą być łączone za pomocą operatora ".".
- Przed i za znakiem "." zawsze powinniśmy dodać znak odstępu:
- <programlisting role="php"><![CDATA[
- $company = 'Zend' . 'Technologies';
- ]]>
- </programlisting>
- </para>
- <para>
- Kiedy łączymy łańcuchy znaków za pomocą operatora ".",
- zalecane jest podzielenie wyrażenia na wiele linii w celu
- zwiększenia czytelności. W takich przypadkach, każda
- linia powinna być wcięta za pomocą znaków odstępu aby
- wszystkie operatory "." leżały w jednej linii pod znakiem "=":
- <programlisting role="php"><![CDATA[
- $sql = "SELECT `id`, `name` FROM `people` "
- . "WHERE `name` = 'Susan' "
- . "ORDER BY `name` ASC ";
- ]]>
- </programlisting>
- </para>
- </sect3>
- </sect2>
- <sect2 id="coding-standard.coding-style.arrays">
- <title>Tablice</title>
- <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
- <title>Tablice indeksowane numerycznie</title>
- <para>Niedozwolone jest użycie ujemnych liczb jako indeksów tabel.</para>
- <para>
- Indeksowana tablica powinna zaczynać się od nieujemnej
- liczby, jednak liczby inne niż 0 jako pierwszy indeks są
- odradzane.
- </para>
- <para>
- Kiedy deklarujesz indeksowaną numerycznie tablicę za pomocą
- funkcji <code>array</code>, powinieneś dodać znak
- odstępu po każdym przecinku w celu zwiększenia czytelności:
- <programlisting role="php"><![CDATA[
- $sampleArray = array(1, 2, 3, 'Zend', 'Studio');
- ]]>
- </programlisting>
- </para>
- <para>
- Dozwolone jest deklarowanie tablic indeksowanych
- numerycznie w wielu wierszach używając konstrukcji "array".
- W takim przypadku, każdy następny wiersz musi być dopełniony,
- znakami odstępu aby początki wierszy były wyrównane:
- <programlisting role="php"><![CDATA[
- $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
- $a, $b, $c,
- 56.44, $d, 500);
- ]]>
- </programlisting>
- </para>
- </sect3>
- <sect3 id="coding-standard.coding-style.arrays.associative">
- <title>Tablice asocjacyjne</title>
- <para>
- Kiedy deklarujesz tablice asocjacyjne za pomocą konstrukcji
- <code>array</code> zalecane jest rozbicie wyrażenia na wiele
- wierszy. W takim przypadku każdy następny wiersz powinien
- być dopełniony znakami odstępu, aby klucze i wartości były
- wyrównane:
- <programlisting role="php"><![CDATA[
- $sampleArray = array('firstKey' => 'firstValue',
- 'secondKey' => 'secondValue');
- ]]>
- </programlisting>
- </para>
- </sect3>
- </sect2>
- <sect2 id="coding-standard.coding-style.classes">
- <title>Klasy</title>
- <sect3 id="coding-standard.coding-style.classes.declaration">
- <title>Deklaracja klas</title>
- <para>
- Klasy powinny być nazywane zgodnie z konwencjami Zend Framework.
- </para><para>
- Klamra otwierająca klasę powinna zawsze znajdować się w linii
- pod nazwą klasy (styl "one true brace").
- </para><para>
- Każda klasa musi posiadać blok dokumentacji zgodny ze
- standardem PHPDocumentor.
- </para><para>
- Każdy kod wewnątrz klasy musi być wcięty na cztery spacje.
- </para><para>
- Tylko jedna klasa dozwolona jest w jednym pliku PHP.
- </para><para>
- Umieszczanie dodatkowego kodu w pliku klasy jest dozwolone,
- ale odradzane. W takich plikach dwie puste linie muszą
- oddzielać kod klasy od dodatkowego kodu PHP w pliku.
- </para><para>
- Oto przykład poprawnej deklaracji klasy:
- <programlisting role="php"><![CDATA[
- /**
- * Blok dokumentacji
- */
- class SampleClass
- {
- // cała zawartość klasy musi
- // być wcięta na cztery spacje
- }
- ]]>
- </programlisting>
- </para>
- </sect3>
- <sect3 id="coding-standard.coding-style.classes.member-variables">
- <title>Zmienne klas</title>
- <para>
- Zmienne klas powinny być nazywane zgodnie z poniższymi konwencjami.
- </para>
- <para>
- Wszystkie zmienne muszą być deklarowane na samym początku
- klasy, przed zadeklarowaniem jakichkolwiek funkcji.
- </para>
- <para>
- Użycie konstrukcji <code>var</code> jest niedozwolone.
- Zawsze deklarujemy widoczność zmiennych klas za pomocą jednej
- z konstrukcji: <code>private</code>, <code>protected</code>, lub
- <code>public</code>.
- Uzyskiwanie dostępu do zmiennych klas bezpośrednio poprzez
- ustawienie ich jako publicznych jest dozwolone, ale odradzane
- na rzecz metod dostępowych (set/get).
- </para>
- </sect3>
- </sect2>
- <sect2 id="coding-standard.coding-style.functions-and-methods">
- <title>Funkcje i metody</title>
- <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
- <title>Deklaracja funkcji oraz metod</title>
- <para>
- Funkcje powinny być nazywane zgodnie z poniższymi konwencjami.
- </para>
- <para>
- Funkcje wewnątrz klas zawsze muszą mieć zadeklarowaną
- dostępność za pomocą konstrukcji <code>private</code>,
- <code>protected</code>, lub <code>public</code>.
- </para>
- <para>
- Tak jak w klasach, klamra otwierająca powinna zawsze znajdować
- się w linii pod nazwą funkcji (styl "one true brace").
- Nie powinno być odstępu między nazwą funkcji a otwierającym
- nawiasem argumentów.
- </para>
- <para>
- Deklarowanie funkcji w przestrzeni globalnej jest odradzane.
- </para>
- <para>
- Oto przykład poprawnej deklaracji funkcji w klasie:
- <programlisting role="php"><![CDATA[
- /**
- * Blok dokumentacji
- */
- class Foo
- {
- /**
- * Blok dokumentacji
- */
- public function bar()
- {
- // cała zawartość funkcji musi
- // być wcięta na cztery spacje
- }
- }
- ]]>
- </programlisting>
- </para>
- <para>
- <emphasis>UWAGA:</emphasis> Przekazywanie przez referencję
- dozwolone jest tylko podczas deklaracji funkcji:
- <programlisting role="php"><![CDATA[
- /**
- * Blok dokumentacji
- */
- class Foo
- {
- /**
- * Blok dokumentacji
- */
- public function bar(&$baz)
- {}
- }
- ]]>
- </programlisting>
- </para>
- <para>
- Przekazywanie przez referencję podczas wywołania jest zabronione.
- </para>
- <para>
- Zwracana wartość nie może być objęta cudzysłowami. To mogłoby
- zmniejszyć czytelność kodu i może spowodować, że przestanie
- on działać, jeśli metoda w przyszłości będzie zwracać
- referencję.
- <programlisting role="php"><![CDATA[
- /**
- * Blok dokumentacji
- */
- class Foo
- {
- /**
- * ŹLE
- */
- public function bar()
- {
- return($this->bar);
- }
- /**
- * DOBRZE
- */
- public function bar()
- {
- return $this->bar;
- }
- }
- ]]>
- </programlisting>
- </para>
- </sect3>
- <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
- <title>Użycie funkcji oraz metod</title>
- <para>
- Argumenty funkcji powinny być oddzielone jednym znakiem
- odstępu po przecinku. To jest przykład poprawnego wywołania
- funkcji przyjmującej trzy argumenty:
- <programlisting role="php"><![CDATA[
- threeArguments(1, 2, 3);
- ]]>
- </programlisting>
- </para>
- <para>
- Przekazywanie przez referencję w czasie wywołania jest
- zabronione. Zobacz sekcję opisującą sposób deklaracji
- funkcji, aby poznać prawidłowy sposób przekazywania
- argumentów przez referencję.
- </para>
- <para>
- Funkcje które przyjmują tablice jako argumenty, mogą zawierać
- konstrukcję "array" i mogą być rozdzielone na wiele linii
- w celu zwiększenia czytelności. W tych przypadkach wciąż
- obowiązuje standard dla tablic:
- <programlisting role="php"><![CDATA[
- threeArguments(array(1, 2, 3), 2, 3);
- threeArguments(array(1, 2, 3, 'Zend', 'Studio',
- $a, $b, $c,
- 56.44, $d, 500), 2, 3);
- ]]>
- </programlisting>
- </para>
- </sect3>
- </sect2>
- <sect2 id="coding-standard.coding-style.control-statements">
- <title>Instrukcje kontrolne</title>
- <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
- <title>If/Else/Elseif</title>
- <para>
- Wyrażenia kontrolne oparte o konstrukcje <code>if</code>
- oraz <code>elseif</code> muszą posiadać jeden znak odstępu
- przed nawiasem otwierającym warunek i jeden znak odstępu za
- nawiasem zamykającym.
- </para>
- <para>
- Instrukcje warunkowe znajdujące się pomiędzy nawiasami muszą
- być odgraniczone znakami odstępu. Do grupowania większych
- warunków zalecane jest użycie dodatkowych nawiasów.
- </para>
- <para>
- Klamrowy nawias otwierający powinien znajdować się w tej
- samej linii co warunek. Nawias zamykający zawsze powinien
- znajdować się w osobnej nowej linii. Zawartość znajdująca
- się między nawiasami klamrowymi musi być wcięta za pomocą
- czterech znaków odstępu.
- <programlisting role="php"><![CDATA[
- if ($a != 2) {
- $a = 2;
- }
- ]]>
- </programlisting>
- </para>
- <para>
- Formatowanie instrukcji "if", które zawierają instrukcję
- "elseif" lub "else", powinno wyglądać tak jak w poniższym
- przykładzie:
- <programlisting role="php"><![CDATA[
- if ($a != 2) {
- $a = 2;
- } else {
- $a = 7;
- }
- if ($a != 2) {
- $a = 2;
- } elseif ($a == 3) {
- $a = 4;
- } else {
- $a = 7;
- }
- ]]>
- </programlisting>
- W pewnych okolicznościach PHP pozwala na zapisanie tych
- wyrażeń bez nawiasów. Standard kodowania wymaga, aby
- wszystkie wyrażenia "if", "elseif" oraz "else" używały
- nawiasów.
- </para>
- <para>
- Użycie instrukcji "elseif" jest dozwolone ale mocno
- odradzane. Zamiast tej instrukcji zalecane jest użycie
- kombinacji "else if".
- </para>
- </sect3>
- <sect3 id="coding-standards.coding-style.control-statements.switch">
- <title>Instrukcja Switch</title>
- <para>
- Instrukcje kontrolne umieszczone wewnątrz instrukcji "switch"
- muszą posiadać pojedynczy znak odstępu zarówno przed nawiasem
- jak i za nim.
- </para>
- <para>
- Cała zawartość wewnątrz instrukcji "switch" musi być wcięta
- na cztery spacje. Zawartość każdej instrukcji "case" musi
- być wcięta na kolejne cztery spacje.
- </para>
- <programlisting role="php"><![CDATA[
- switch ($numPeople) {
- case 1:
- break;
- case 2:
- break;
- default:
- break;
- }
- ]]>
- </programlisting>
- <para>
- Konstrukcja <code>default</code> powinna zawsze znaleźć się
- wewnątrz konstrukcji <code>switch</code>.
- </para>
- <para>
- <emphasis>UWAGA:</emphasis> W niektórych przypadkach przydatne
- jest zapisanie jednej klauzuli <code>case</code>, po której
- sterowanie powinno przejść do następnej klauzuli <code>case</code>
- poprzez nie umieszczanie polecenia <code>break</code> lub
- <code>return</code> w wyjściowym <code>case</code>.
- Aby odróżnić takie sytuacje od niezamierzonych błędów,
- wszystkie instrukcje <code>case</code> których intencjonalnie
- pozbawiono <code>break</code> lub <code>return</code> muszą
- zawierać komentarz: "// break intentionally omitted".
- </para>
- </sect3>
- </sect2>
- <sect2 id="coding-standards.inline-documentation">
- <title>Dokumentacja</title>
- <sect3 id="coding-standards.inline-documentation.documentation-format">
- <title>Format dokumentacji</title>
- <para>
- Wszystkie bloki dokumentacji muszą być kompatybilne z
- formatem phpDocumentor. Opisywanie formatu phpDocumentor
- jest poza zakresem tego dokumentu. Aby uzyskać więcej
- informacji, odwiedź: <ulink url="http://phpdoc.org/">http://phpdoc.org/</ulink>
- </para>
- <para>
- Każdy plik źródłowy napisany dla Zend Framework lub działający
- w oparciu o framework musi posiadać na początku pliku ogólny
- blok dokumentacji dla danego pliku oraz blok dokumentacji dla
- klasy bezpośrednio przed jej deklaracją. Poniżej są przykłady
- takich bloków:
- </para>
- </sect3>
- <sect3 id="coding-standards.inline-documentation.files">
- <title>Pliki</title>
- <para>
- Każdy plik zawierający kod PHP musi na samym początku
- posiadać blok dokumentacji zawierający przynajmniej
- następujące znaczniki standardu phpDocumentor:
- <programlisting role="php"><![CDATA[
- /**
- * Short description for file
- *
- * Long description for file (if any)...
- *
- * LICENSE: Some license information
- *
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license BSD License
- * @version $Id:$
- * @link http://framework.zend.com/package/PackageName
- * @since File available since Release 1.5.0
- */
- ]]>
- </programlisting>
- </para>
- </sect3>
- <sect3 id="coding-standards.inline-documentation.classes">
- <title>Klasy</title>
- <para>
- Każda klasa musi posiadać blok dokumentacji zawierający
- przynajmniej następujące znaczniki standardu phpDocumentor:
- <programlisting role="php"><![CDATA[
- /**
- * Short description for class
- *
- * Long description for class (if any)...
- *
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license BSD License
- * @version Release: @package_version@
- * @link http://framework.zend.com/package/PackageName
- * @since Class available since Release 1.5.0
- * @deprecated Class deprecated in Release 2.0.0
- */
- ]]>
- </programlisting>
- </para>
- </sect3>
- <sect3 id="coding-standards.inline-documentation.functions">
- <title>Funkcje</title>
- <para>
- Każda funkcja, a także metoda obiektu, musi posiadać blok
- dokumentacji zawierający przynajmniej następujące znaczniki
- standardu phpDocumentor:
- <itemizedlist>
- <listitem><para>Opis funkcji</para></listitem>
- <listitem><para>Opis wszystkich argumentów</para></listitem>
- <listitem><para>Opis wszystkich możliwych zwracanych wartości</para></listitem>
- </itemizedlist>
- </para>
- <para>
- Nie jest konieczne użycie znacznika "@access" ponieważ
- poziom dostępu jest znany dzięki konstrukcji "public",
- "private", lub "protected" użytej podczas deklaracji
- funkcji.
- </para>
- <para>
- Jeśli funkcja/metoda może wyrzucać wyjątek, użyj znacznika
- "@throws":
- <programlisting role="php"><![CDATA[
- @throws exceptionclass [opis wyjątku]
- ]]>
- </programlisting>
- </para>
- </sect3>
- </sect2>
- </sect1>
- </appendix>
|