coding_standard.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. <appendix id="coding-standard">
  2. <title>Zend Framework Programmeer Standaard</title>
  3. <sect1 id="coding-standard.overview">
  4. <title>Overzicht</title>
  5. <sect2 id="coding-standard.overview.scope">
  6. <title>Bereik</title>
  7. <para>Dit document beschrijft de richtlijnen en
  8. hulpmiddelen voor softwareontwikkelaars en teams die programmeren met
  9. behulp van of die programmeren op het Zend Framework. De volgende onderwerpen zullen aan de orde komen:</para>
  10. <para><itemizedlist>
  11. <listitem>
  12. <para revisionflag="changed">PHP bestandsformattering</para>
  13. </listitem>
  14. <listitem>
  15. <para revisionflag="changed">Benamingsovereenkomst</para>
  16. </listitem>
  17. <listitem>
  18. <para revisionflag="changed">Codestijl</para>
  19. </listitem>
  20. <listitem>
  21. <para>Inline Documentatie</para>
  22. </listitem>
  23. </itemizedlist></para>
  24. </sect2>
  25. <sect2 id="coding-standard.overview.goals">
  26. <title>Doelen</title>
  27. <para>Goede coderichtlijnen zijn belangrijk in
  28. alle ontwikkelingsprojecten, in het bijzonder wanneer meerdere
  29. programmeurs aan eenzelfde project werken. De coderichtlijnen spelen een
  30. grote rol in het produceren van kwaliteitscode met minder bugs en die
  31. gemakkelijker kan worden onderhouden.</para>
  32. </sect2>
  33. </sect1>
  34. <sect1 id="coding-standard.php-file-formatting">
  35. <title>PHP Bestandsformattering</title>
  36. <sect2 id="coding-standard.php-file-formatting.general">
  37. <title>Algemeen</title>
  38. <para>Voor bestanden die alleen PHP code bevatten
  39. is de sluitende tag ("?&gt;") nooit toegelaten. Die wordt niet geëist
  40. door PHP. Het niet schrijven van deze afbakening voorkomt het toevoegen
  41. van spaties in de output.</para>
  42. <para><emphasis>BELANGRIJK</emphasis>: Toevoegen van binaire gegevens
  43. zoals toegelaten door <code>__HALT_COMPILER()</code> is niet toegelaten
  44. in eender welk Zend Framework PHP bestand of bestanden die daarvan zijn
  45. afgeleid. Het gebruik van deze mogelijkheid is alleen toegelaten in
  46. speciale installatie scripts.</para>
  47. </sect2>
  48. <sect2 id="coding-standard.php-file-formatting.indentation">
  49. <title>Indenting</title>
  50. <para>Gebruik een indent van 4 spaties, zonder tabulatie</para>
  51. </sect2>
  52. <sect2 id="coding-standard.php-file-formatting.max-line-length">
  53. <title>Maximale regellengte</title>
  54. <para>De doellengte voor een regel is 80 tekens,
  55. dus ontwikkelaars zouden moeten proberen om zo dicht mogelijk bij de 80
  56. kolommengrens te blijven èn praktisch te blijven. Langere regels zijn
  57. aanvaardbaar. De maximale lengte voor eender welke regel code in PHP is
  58. 120 tekens.</para>
  59. </sect2>
  60. <sect2 id="coding-standard.php-file-formatting.line-termination">
  61. <title>Regeleinde</title>
  62. <para>Regeleindes worden geschreven volgens de
  63. Unix standaard. Regels moeten eindigen op één enkele linefeed (LF). Een
  64. linefeed is een ordinal 10, of een hexadecimale 0x0A.</para>
  65. <para>Gebruik geen carriage returns (CR) zoals
  66. Macintosh computers (0x0D).</para>
  67. <para>Gebruik geen carriage return/linefeed
  68. combinatie (CRLF) zoals Windows computers (0x0D, 0x0A).</para>
  69. </sect2>
  70. </sect1>
  71. <sect1 id="coding-standard.naming-conventions">
  72. <title>Benamingsovereenkomst</title>
  73. <sect2 id="coding-standard.naming-conventions.classes">
  74. <title>Klassen</title>
  75. <para>Het Zend Framework gebruikt een
  76. klassebenamingsovereenkomst waarbij de namen van de klassen direct
  77. overeenkomen met de mappen waarin ze zijn opgeslagen. De root directory
  78. van de Zend Framework is de "Zend" map, waaronder alle klassen
  79. hiërarchisch zijn ondergebracht.</para>
  80. <para>Klassenamen mogen alleen alfanumerieke tekens bevatten.
  81. Nummers zijn toegelaten in klassename maar worden afgeraden. Underscores
  82. zijn alleen toegelaten als vervanging van een padscheider -- de
  83. bestandsnaam "Zend/Db/Table.php" moet overeenkomen met de klassenaam
  84. "Zend_Db_Table".</para>
  85. <para>Indien een klassenaam bestaat uit meer dan één woord
  86. moet de eerste letter van elk woord een hoofdletter zijn. Opeenvolgende
  87. hoofdletters zijn niet toegestaan, bv. een klasse "Zend_PDF" is niet
  88. toegestaan terwijl "Zend_Pdf" aanvaardbaar is.</para>
  89. <para>Zend Framework klassenamen waarvan Zend of één van de
  90. bijdragende partners de auteur is en die met het Framework worden
  91. verzonden moeten altijd beginnen met "Zend_" en moeten in de "Zend/" map
  92. hiërarchie worden opgeslagen.</para>
  93. <para>Dit zijn voorbeelden van aanvaardbare
  94. klassenamen:</para>
  95. <para><programlisting role="php">Zend_Db
  96. Zend_View
  97. Zend_View_Helper
  98. </programlisting> <emphasis>BELANGRIJK:</emphasis> Code die werkt met het Framework maar er geen
  99. deel van is, bv. code geschreven door een Frameworkgebruiker en niet
  100. door Zend of één van de Framework partnerbedrijven, mogen nooit
  101. beginnen met "Zend_".</para>
  102. </sect2>
  103. <sect2 id="coding-standard.naming-conventions.interfaces">
  104. <title>Interfaces</title>
  105. <para>Interface klassen moeten dezelfde overeenkomsten
  106. respecteren als andere klassen (zie hierboven), maar moeten bovendien
  107. eindigen op het woord "interface", zoals in deze
  108. voorbeelden:</para>
  109. <para><programlisting role="php">Zend_Log_Adapter_Interface
  110. Zend_Controller_Dispatcher_Interface</programlisting></para>
  111. </sect2>
  112. <sect2 id="coding-standard.naming-conventions.filenames">
  113. <title>Bestandsnamen</title>
  114. <para>Voor alle andere bestanden zijn alleen alfanumerieke
  115. tekens, underscores en het min teken ("-") toegestaan. Spaties zijn
  116. verboden.</para>
  117. <para>Elk bestand dat PHP code bevat moet eindigen op de
  118. extensie ".php". Deze voorbeelden tonen aanvaardbare bestandsnamen voor
  119. bestanden die klassen bevatten uit de voorbeelden in de vorige
  120. sectie:</para>
  121. <para><programlisting role="php">Zend/Db.php
  122. Zend/Controller/Front.php
  123. Zend/View/Helper/FormRadio.php</programlisting> Bestandsnamen moeten de
  124. overeenkomst met de klassenamen respecteren, zoals hierboven
  125. beschreven.</para>
  126. </sect2>
  127. <sect2 id="coding-standard.naming-conventions.functions-and-methods">
  128. <title>Functies en methodes</title>
  129. <para>Functienamen mogen alleen alfanumerieke tekens bevatten.
  130. Underscores zijn niet toegestaan. Nummers zijn toegestaan in
  131. functienamen maar worden afgeraden.</para>
  132. <para>Functienamen moeten altijd met een kleine letter
  133. beginnen. Indien een functienaam bestaat uit meer dan één woord, moet de
  134. eerste letter van elk nieuw woord een hoofdletter zijn. Dit wordt
  135. de "studlyCaps" of "camelCaps" methode
  136. genoemd.</para>
  137. <para>Langsprekendheid wordt aangeraden. Functienamen zouden
  138. zoveel woorden moeten bevatten als praktisch is om het begrijpen van de
  139. code te vergemakkelijken.</para>
  140. <para>Dit zijn voorbeelden van aanvaardbare
  141. functienamen: <programlisting role="php">filterInput()
  142. getElementById()
  143. widgetFactory()</programlisting></para>
  144. <para>Voor objectgeoriënteerd programmeren zouden
  145. databenaderingsmethodes altijd met "get" of "set" moeten worden
  146. voorafgegaan. Bij het gebruik van ontwerppatronen, zoals het singleton
  147. of factory patroon, zou de naam van de methode de patroonnaam moeten
  148. bevatten indien mogelijk. Dit om het gebruik van het patroon
  149. gemakkelijker herkenbaar te maken.</para>
  150. <para>Functies in het globale bereik ("drijvende
  151. functies") zijn toegestaan maar afgeraden. Het is aanbevolen deze
  152. functies in een statische klasse te wikkelen.</para>
  153. </sect2>
  154. <sect2 id="coding-standard.naming-conventions.variables">
  155. <title>Variabelen</title>
  156. <para>Namen van variabelen mogen alleen bestaan uit alfanumerieke
  157. tekens. Underscores zijn niet toegestaan. Nummers zijn toegestaan maar
  158. worden afgeraden.</para>
  159. <para>Voor eigenschappen die verklaard worden met het "private" of
  160. "protected" concept moet het eerste teken van de functienaam een
  161. enkele underscore zijn. Dit is het enige aanvaardbare gebruik van de
  162. underscore in een functienaam. Eigenschappen verklaard als "public" mogen
  163. nooit met een underscore beginnen.</para>
  164. <para>Zoals functienamen (zie sectie 3.3, hierboven) moeten
  165. namen van variabelen altijd met een kleine letter beginnen en volgen ze de
  166. "camelCaps" behoofdletteringsovereenkomst.</para>
  167. <para>Langsprekendheid is aangeraden. Variabelen zouden zoveel
  168. woorden moeten bevatten als praktisch is. Beknopte variabelnamen zoals
  169. "$i" en "$n" worden afgeraden voor alles behalve de kleinst mogelijke
  170. loops. Als een loop meer dan 20 coderegels bevat, moeten de index
  171. variabelen meer beschrijvende namen hebben.</para>
  172. </sect2>
  173. <sect2 id="coding-standard.naming-conventions.constants">
  174. <title>Constanten</title>
  175. <para>Namen voor constanten mogen zowel alfanumerieke tekens
  176. als de underscore bevatten. Nummers zijn toegelaten in
  177. constantnamen.</para>
  178. <para>constantnamen moeten altijd alleen bestaan uit
  179. hoofdletters wat de alfanumerieke tekens betreft.</para>
  180. <para>Constanten moeten worden gedefinieerd als klasseleden
  181. door het concept "const" te gebruiken. Constanten verklaren in het
  182. globale bereik met "define" is toegelaten maar wordt afgeraden.</para>
  183. </sect2>
  184. </sect1>
  185. <sect1 id="coding-standard.coding-style">
  186. <title>Codestijl</title>
  187. <sect2 id="coding-standard.coding-style.php-code-demarcation">
  188. <title>PHP Code Afbakening</title>
  189. <para>PHP code moet altijd worden afgebakend met de volledige standaard PHP
  190. markeringen: <programlisting role="php">
  191. &lt;?php
  192. ?&gt;</programlisting></para>
  193. <para>Korte markeringen zijn nooit toegelaten</para>
  194. </sect2>
  195. <sect2 id="coding-standard.coding-style.strings">
  196. <title>Strings</title>
  197. <sect3 id="coding-standard.coding-style.strings.literals">
  198. <title>String Literals</title>
  199. <para>Wanneer een string letterlijk is (hij bevat geen variabelvervanging),
  200. moet altijd de apostroof of "enkele quote" gebruikt worden om de string
  201. af te bakenen: <programlisting role="php">
  202. $a = 'Voorbeeld String';</programlisting></para>
  203. </sect3>
  204. <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
  205. <title>Letterlijke strings die apostrofen bevatten</title>
  206. <para>Wanneer een letterlijke string zelf apostrofen bevat is het
  207. toegelaten de string af te bakenen met aanhalingstekens ("double
  208. quotes"). Dit is dringend aangeraden voor SQL verklaringen:
  209. <programlisting role="php">
  210. $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";</programlisting>
  211. De bovenstaande syntax is verkozen boven het "escapen" van de apostrofen.</para>
  212. </sect3>
  213. <sect3 id="coding-standard.coding-style.strings.variable-substitution">
  214. <title>Variabelvervanging</title>
  215. <para>Variabelvervanging is toegestaan met respect voor de volgende vormen: <programlisting role="php">
  216. $greeting = "Hello $name, welcome back!";
  217. $greeting = "Hello {$name}, welcome back!";</programlisting></para>
  218. <para>Om uniformiteit te respecteren is deze vorm niet toegestaan: <programlisting
  219. role="php">
  220. $greeting = "Hello ${name}, welcome back!";</programlisting></para>
  221. </sect3>
  222. <sect3 id="coding-standard.coding-style.strings.string-concatenation">
  223. <title>String samenvoeging</title>
  224. <para>Strings kunnen samengevoegd worden met de "." operator. Er moet steeds een spatie
  225. vòòr en na de "." operator worden ingevoegd om de leesbaarheid te verbeteren: <programlisting role="php">
  226. $company = 'Zend' . 'Technologies';</programlisting></para>
  227. <para>Wanneer men strings samenvoegt met de "." operator is het toegelaten
  228. de verklaring in meerdere regels op te breken om de leesbaarheid te vergroten.
  229. In dat geval moet elke opeenvolgende regel met spaties worden opgevuld zodat
  230. de "." operator uitgelijnd is onder de "=" operator: <programlisting role="php">
  231. $sql = "SELECT `id`, `name` FROM `people` "
  232. . "WHERE `name` = 'Susan' "
  233. . "ORDER BY `name` ASC ";</programlisting></para>
  234. </sect3>
  235. </sect2>
  236. <sect2 id="coding-standard.coding-style.arrays">
  237. <title>Arrays</title>
  238. <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
  239. <title>Numeriek Geïndexeerde Arrays</title>
  240. <para>Negatieve nummers zijn verboden voor indexen.</para>
  241. <para>Een geïndexeerde array mag starten met eender welk niet negatief nummer.
  242. Dit wordt evenwel afgeraden. Het is aangeraden dat alle arrays een
  243. basisindex van 0 hebben.</para>
  244. <para>Wanneer men een geïndexeerde array definieert met het <code>array</code>
  245. concept moet er een spatie worden ingevoegd na elke komma afbakening om
  246. de leesbaarheid te verbeteren: <programlisting role="php">
  247. $sampleArray = array(1, 2, 3, 'Zend', 'Studio');</programlisting></para>
  248. <para>Het is ook toegelaten om een geïndexeerde array op meerdere
  249. regels te definieren. In dat geval moet elke opeenvolgende regel met spaties
  250. worden opgevuld zodanig dat het begin van elke regel als volgt is uitgelijnd:
  251. <programlisting role="php">
  252. $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
  253. $a, $b, $c,
  254. 56.44, $d, 500);</programlisting></para>
  255. </sect3>
  256. <sect3 id="coding-standard.coding-style.arrays.associative">
  257. <title>Associatieve Arrays</title>
  258. <para>Wanneer men associatieve arrays met het <code>array</code>
  259. concept definieert is het aangeraden de verklaring in meerdere regels op te
  260. breken. In dat geval moet elke opeenvolgende regel met spaties worden
  261. opgevuld zodat de indexen (keys) en waarden (values) uitgelijnd zijn:
  262. <programlisting role="php">
  263. $sampleArray = array('firstKey' =&gt; 'firstValue',
  264. 'secondKey' =&gt; 'secondValue');</programlisting></para>
  265. </sect3>
  266. </sect2>
  267. <sect2 id="coding-standard.coding-style.classes">
  268. <title>Klassen</title>
  269. <sect3 id="coding-standard.coding-style.classes.declaration">
  270. <title>Klasse Verklaring</title>
  271. <para>Klassebenaming moet de volgende overeenkomsten volgen.</para>
  272. <para>De accolade wordt steeds op de regel onder de klassenaam geschreven
  273. ("one true brace" vorm).</para>
  274. <para>Elke klasse moet een documentatieblok hebben dat de PHPDocumentor
  275. standaard volgt.</para>
  276. <para>Code in een klasse moet geïndenteerd zijn met vier spaties.</para>
  277. <para>Eén klasse, éen bestand.</para>
  278. <para>Bijkomende code schrijven in een klassebestand is toegelaten maar wordt
  279. afgeraden. Indien men het toch doet moet de bijkomende code met twee lege
  280. regels worden gescheiden van de klassecode.</para>
  281. <para>Dit is een voorbeeld van een aanvaardbare klasseverklaring:
  282. <programlisting role="php">
  283. /**
  284. * Documentatie Blok Hier
  285. */
  286. class SampleClass
  287. {
  288. // de gehele inhoud van de klasse
  289. // moet geindenteerd worden met vier spaties
  290. }</programlisting></para>
  291. </sect3>
  292. <sect3 id="coding-standard.coding-style.classes.member-variables">
  293. <title>Klasse lidvariabelen</title>
  294. <para>Lidvariabelen moeten benaamd worden volgens de variabele
  295. benamingsovereenkomst.</para>
  296. <para>Variabelen die in de klasse worden verklaard moeten bovenaan
  297. in de klasse worden opgesomd, vòòrdat functies worden verklaard.</para>
  298. <para>Het concept <code>var</code> is niet toegestaan. Lidvariabelen
  299. moeten steeds hun zichtbaarheid verklaren door één van de <code>private</code>,
  300. <code>protected</code>, of <code>public</code> concepten te gebruiken.
  301. Toegang verlenen aan lidvariabelen door hen publiek te maken is toegestaan
  302. maar wordt afgeraden ten voordele van de databenaderingsmethodes (set/get).</para>
  303. </sect3>
  304. </sect2>
  305. <sect2 id="coding-standard.coding-style.functions-and-methods">
  306. <title>Functies en Methodes</title>
  307. <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
  308. <title>Functie en Methode Verklaring</title>
  309. <para>Functiebenaming moet de benamingsovereenkomsten volgen.</para>
  310. <para>Functies binnen klasses moeten steeds hun zichtbaarheid verklaren
  311. door één van de <code>private</code>, <code>protected</code>, of
  312. <code>public</code> concepten te gebruiken.</para>
  313. <para>Net zoals klassen, moet de accolade steeds op de regel onder de functienaam
  314. worden geschreven ("one true brace" vorm). Er is geen spatie tussen de functienaam
  315. en de haakjes voor de argumenten. Er is één spatie tussen de sluitende haakjes en de
  316. accolade.</para>
  317. <para>Functies in het globale bereik zijn zeer sterk afgeraden.</para>
  318. <para>Dit is een voorbeeld van een aanvaardbare verklaring van een functie in een klasse:
  319. <programlisting role="php">
  320. /*
  321. * Documentatie blok hier
  322. */
  323. function sampleMethod($a)
  324. {
  325. // de gehele inhoud van de functie
  326. // moet geindenteerd worden met vier spaties
  327. }</programlisting></para>
  328. <para><emphasis>NOTA:</emphasis> Doorgeven per verwijzing (pass by reference) is
  329. alleen toegestaan in de functieverklaring: <programlisting role="php">
  330. function sampleMethod(&amp;$a)
  331. {}</programlisting></para>
  332. <para>Call-time pass by reference is verboden.</para>
  333. <para>De terugkeerwaarde mag niet tussen haakjes worden ingesloten.
  334. Dat kan de leesbaarheid hinderen en kan ook de code breken indien een
  335. methode later wordt veranderd om per verwijzing terug te sturen.
  336. <programlisting role="php">
  337. function foo()
  338. {
  339. // FOUT
  340. return($this-&gt;bar);
  341. // GOED
  342. return $this-&gt;bar;
  343. }</programlisting></para>
  344. </sect3>
  345. <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
  346. <title>Functie- en Methodegebruik</title>
  347. <para>Functie-argumenten worden gescheiden door één enkele spatie
  348. na de komma afbakening. Dit is een voorbeeld van een aanvaardbare
  349. functie-aanroep voor een functie die drie argumenten heeft:
  350. <programlisting role="php">
  351. threeArguments(1, 2, 3);</programlisting></para>
  352. <para>Call-time pass by reference is verboden. Zie de sectie over
  353. functieverklaringen voor de juiste wijze om argumenten per verwijzing door te
  354. sturen.</para>
  355. <para>Voor functies welke arrays als argument aanvaardden mag de
  356. functieaanroep het "array" concept bevatten en kan deze in meerdere
  357. regels worden opgesplitst om de leesbaarheid te vergroten.
  358. In deze gevallen blijven de regels voor het schrijven van arrays van
  359. kracht: <programlisting role="php">
  360. threeArguments(array(1, 2, 3), 2, 3);
  361. threeArguments(array(1, 2, 3, 'Zend', 'Studio',
  362. $a, $b, $c,
  363. 56.44, $d, 500), 2, 3);</programlisting></para>
  364. </sect3>
  365. </sect2>
  366. <sect2 id="coding-standard.coding-style.control-statements">
  367. <title>Control Statements</title>
  368. <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
  369. <title>If / Else / Elseif</title>
  370. <para>Control statements gebaseerd op <code>if</code> en
  371. <code>elseif</code> concepten moeten een enkele spatie voor de openende
  372. haakjes van de conditie, en een enkele spatie na de sluitende haakjes.</para>
  373. <para>In de voorwaardeverklaringen tussen de haakjes moeten
  374. operators gescheiden worden met spaties om de leesbaarheid te
  375. bevorderen. Binnenhaakjes zijn aangeraden voor het groeperen van
  376. meer complexe voorwaarden.</para>
  377. <para>De openingsaccolade wordt op dezelfde regel als de
  378. voorwaardeverklaring geschreven. De sluitende accolade wordt altijd op
  379. een alleenstaande regel geschreven. Alle inhoud binnenin de accolades
  380. moet steeds met vier spaties geïndenteerd worden.
  381. <programlisting role="php">
  382. if ($a != 2) {
  383. $a = 2;
  384. }</programlisting></para>
  385. <para>Voor "if" verklaringen die "else if" of "else" inhouden moet de vorm
  386. zoals in de volgende voorbeelden zijn: <programlisting role="php">
  387. if ($a != 2) {
  388. $a = 2;
  389. } else {
  390. $a = 7;
  391. }
  392. if ($a != 2) {
  393. $a = 2;
  394. } else if ($a == 3) {
  395. $a = 4;
  396. } else {
  397. $a = 7;
  398. }</programlisting> PHP laat het toe om in bepaalde gevallen deze verklaringen zonder
  399. accolades te schrijven. De codestandaard maakt geen verschil en alle "if",
  400. "else if" of "else" verklaringen moeten accolades gebruiken.</para>
  401. <para>Het gebruik van "elseif" is toegestaan maar "else if" wordt sterk
  402. aanbevolen.</para>
  403. </sect3>
  404. <sect3 id="coding-standards.coding-style.control-statements.switch">
  405. <title>Switch</title>
  406. <para>Control statements geschreven met "switch" moeten een enkele spatie
  407. voor de openende haakjes van de voorwaardeverklaring hebben, en een enkele
  408. spatie na de sluitende haakjes.</para>
  409. <para>Alle inhoud binnen een "switch" verklaring moet met vier spaties
  410. geïndenteerd worden. Inhoud onder elke "case" moet geïndenteerd worden
  411. met vier extra spaties.</para>
  412. <programlisting role="php">
  413. switch ($numPeople) {
  414. case 1:
  415. break;
  416. case 2:
  417. break;
  418. default:
  419. break;
  420. }</programlisting>
  421. <para><code>default</code> mag nooit weggelaten worden van een
  422. <code>switch</code> verklaring.</para>
  423. <para><emphasis>NOTA:</emphasis> Het is soms handig een <code>case</code>
  424. verklaring te hebben die doorvalt naar de volgende <code>case</code>
  425. verklaring door het weglaten van <code>break</code> of <code>return</code>
  426. in de verklaring. Om deze gevallen van bugs te onderscheiden moet elk
  427. van de gevallen waarin een <code>break</code> of <code>return</code>
  428. wordt weggelaten een commentaar "// break intentionally omitted"
  429. bevatten.</para>
  430. </sect3>
  431. </sect2>
  432. <sect2 id="coding-standards.inline-documentation">
  433. <title>Inline Documentatie</title>
  434. <sect3 id="coding-standards.inline-documentation.documentation-format">
  435. <title>Documentatie Formaat</title>
  436. <para>Alle documentatieblokken ("docblocks") moeten compatibel zijn
  437. met het phpDocumentor formaat. Een beschrijving van het
  438. phpDocumentor formaat is buiten het bereik van dit document.
  439. Voor meer informatie kunt u terecht op: <ulink
  440. url="http://phpdoc.org/">http://phpdoc.org"</ulink></para>
  441. <para>Alle broncodebestanden geschreven voor het Zend Framework of dat
  442. ermee samenwerkt moet een "file-level" docblock bevatten aan het begin
  443. van elk bestand en een "class-level" docblock onmiddellijk boven elke
  444. klasse. Hierna enkele voorbeelden van zulke docblocks.</para>
  445. </sect3>
  446. <sect3 id="coding-standards.inline-documentation.files">
  447. <title>Bestanden</title>
  448. <para>Elk bestand dat PHP code bevat moet een hoofdblok aan het
  449. begin van het bestand bevatten dat minstens de volgende
  450. phpDocumentor gegevens bevat: <programlisting role="php">
  451. /**
  452. * Korte beschrijving van het bestand
  453. *
  454. * Lange beschrijving van het bestand (indien aanwzeig)...
  455. *
  456. * LICENSE: Licentie informatie
  457. *
  458. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  459. * @license http://www.zend.com/license/3_0.txt PHP License 3.0
  460. * @version $Id:$
  461. * @link http://dev.zend.com/package/PackageName
  462. * @since File available since Release 1.2.0
  463. */</programlisting></para>
  464. </sect3>
  465. <sect3 id="coding-standards.inline-documentation.classes">
  466. <title>Klassen</title>
  467. <para>Elke klasse moet een docblock bevatten dat minstens
  468. de volgende phpDocumentor gegevens bevat: <programlisting role="php">
  469. /**
  470. * Korte beschrijving van de klasse
  471. *
  472. * Lange beschrijving van de klasse (indien aanwezig)...
  473. *
  474. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  475. * @license http://www.zend.com/license/3_0.txt PHP License 3.0
  476. * @version Release: @package_version@
  477. * @link http://dev.zend.com/package/PackageName
  478. * @since Class available since Release 1.2.0
  479. * @deprecated Class deprecated in Release 2.0.0
  480. */</programlisting></para>
  481. </sect3>
  482. <sect3 id="coding-standards.inline-documentation.functions">
  483. <title>Functies</title>
  484. <para>Elke functie, methodes inbegrepen, moet een docblock hebben
  485. dat minstens het volgende bevat: <itemizedlist>
  486. <listitem>
  487. <para>Een beschrijving van de functie</para>
  488. </listitem>
  489. <listitem>
  490. <para>Alle argumenten</para>
  491. </listitem>
  492. <listitem>
  493. <para>Alle mogelijke terugwaarden</para>
  494. </listitem>
  495. </itemizedlist></para>
  496. <para>Het is niet nodig om de "@access" tags te gebruiken
  497. want de zichtbaarheid is reeds bekend via het gebruik van
  498. "public", "private", of "protected" bij het verklaren van de
  499. functie.</para>
  500. <para>Indien een functie of methode een exception mag teruggeven,
  501. gebruik @throws:
  502. <programlisting role="php">
  503. @throws exceptionClass [beschrijving]
  504. </programlisting></para>
  505. </sect3>
  506. </sect2>
  507. </sect1>
  508. </appendix>
  509. <!--
  510. vim:se ts=4 sw=4 et:
  511. -->