1 <appendix id="coding-standard">
2 <title>Zend Framework Programmeer Standaard</title>
4 <sect1 id="coding-standard.overview">
5 <title>Overzicht</title>
7 <sect2 id="coding-standard.overview.scope">
10 <para>Dit document beschrijft de richtlijnen en
11 hulpmiddelen voor softwareontwikkelaars en teams die programmeren met
12 behulp van of die programmeren op het Zend Framework. De volgende onderwerpen zullen aan de orde komen:</para>
16 <para revisionflag="changed">PHP bestandsformattering</para>
20 <para revisionflag="changed">Benamingsovereenkomst</para>
24 <para revisionflag="changed">Codestijl</para>
28 <para>Inline Documentatie</para>
30 </itemizedlist></para>
33 <sect2 id="coding-standard.overview.goals">
36 <para>Goede coderichtlijnen zijn belangrijk in
37 alle ontwikkelingsprojecten, in het bijzonder wanneer meerdere
38 programmeurs aan eenzelfde project werken. De coderichtlijnen spelen een
39 grote rol in het produceren van kwaliteitscode met minder bugs en die
40 gemakkelijker kan worden onderhouden.</para>
44 <sect1 id="coding-standard.php-file-formatting">
45 <title>PHP Bestandsformattering</title>
47 <sect2 id="coding-standard.php-file-formatting.general">
48 <title>Algemeen</title>
50 <para>Voor bestanden die alleen PHP code bevatten
51 is de sluitende tag ("?>") nooit toegelaten. Die wordt niet geëist
52 door PHP. Het niet schrijven van deze afbakening voorkomt het toevoegen
53 van spaties in de output.</para>
55 <para><emphasis>BELANGRIJK</emphasis>: Toevoegen van binaire gegevens
56 zoals toegelaten door <code>__HALT_COMPILER()</code> is niet toegelaten
57 in eender welk Zend Framework PHP bestand of bestanden die daarvan zijn
58 afgeleid. Het gebruik van deze mogelijkheid is alleen toegelaten in
59 speciale installatie scripts.</para>
62 <sect2 id="coding-standard.php-file-formatting.indentation">
63 <title>Indenting</title>
65 <para>Gebruik een indent van 4 spaties, zonder tabulatie</para>
68 <sect2 id="coding-standard.php-file-formatting.max-line-length">
69 <title>Maximale regellengte</title>
71 <para>De doellengte voor een regel is 80 tekens,
72 dus ontwikkelaars zouden moeten proberen om zo dicht mogelijk bij de 80
73 kolommengrens te blijven èn praktisch te blijven. Langere regels zijn
74 aanvaardbaar. De maximale lengte voor eender welke regel code in PHP is
78 <sect2 id="coding-standard.php-file-formatting.line-termination">
79 <title>Regeleinde</title>
81 <para>Regeleindes worden geschreven volgens de
82 Unix standaard. Regels moeten eindigen op één enkele linefeed (LF). Een
83 linefeed is een ordinal 10, of een hexadecimale 0x0A.</para>
85 <para>Gebruik geen carriage returns (CR) zoals
86 Macintosh computers (0x0D).</para>
88 <para>Gebruik geen carriage return/linefeed
89 combinatie (CRLF) zoals Windows computers (0x0D, 0x0A).</para>
93 <sect1 id="coding-standard.naming-conventions">
94 <title>Benamingsovereenkomst</title>
96 <sect2 id="coding-standard.naming-conventions.classes">
97 <title>Klassen</title>
99 <para>Het Zend Framework gebruikt een
100 klassebenamingsovereenkomst waarbij de namen van de klassen direct
101 overeenkomen met de mappen waarin ze zijn opgeslagen. De root directory
102 van de Zend Framework is de "Zend" map, waaronder alle klassen
103 hiërarchisch zijn ondergebracht.</para>
105 <para>Klassenamen mogen alleen alfanumerieke tekens bevatten.
106 Nummers zijn toegelaten in klassename maar worden afgeraden. Underscores
107 zijn alleen toegelaten als vervanging van een padscheider -- de
108 bestandsnaam "Zend/Db/Table.php" moet overeenkomen met de klassenaam
109 "Zend_Db_Table".</para>
111 <para>Indien een klassenaam bestaat uit meer dan één woord
112 moet de eerste letter van elk woord een hoofdletter zijn. Opeenvolgende
113 hoofdletters zijn niet toegestaan, bv. een klasse "Zend_PDF" is niet
114 toegestaan terwijl "Zend_Pdf" aanvaardbaar is.</para>
116 <para>Zend Framework klassenamen waarvan Zend of één van de
117 bijdragende partners de auteur is en die met het Framework worden
118 verzonden moeten altijd beginnen met "Zend_" en moeten in de "Zend/" map
119 hiërarchie worden opgeslagen.</para>
121 <para>Dit zijn voorbeelden van aanvaardbare
124 <para><programlisting role="php">Zend_Db
129 </programlisting> <emphasis>BELANGRIJK:</emphasis> Code die werkt met het Framework maar er geen
130 deel van is, bv. code geschreven door een Frameworkgebruiker en niet
131 door Zend of één van de Framework partnerbedrijven, mogen nooit
132 beginnen met "Zend_".</para>
135 <sect2 id="coding-standard.naming-conventions.interfaces">
136 <title>Interfaces</title>
138 <para>Interface klassen moeten dezelfde overeenkomsten
139 respecteren als andere klassen (zie hierboven), maar moeten bovendien
140 eindigen op het woord "interface", zoals in deze
143 <para><programlisting role="php">Zend_Log_Adapter_Interface
144 Zend_Controller_Dispatcher_Interface</programlisting></para>
147 <sect2 id="coding-standard.naming-conventions.filenames">
148 <title>Bestandsnamen</title>
150 <para>Voor alle andere bestanden zijn alleen alfanumerieke
151 tekens, underscores en het min teken ("-") toegestaan. Spaties zijn
154 <para>Elk bestand dat PHP code bevat moet eindigen op de
155 extensie ".php". Deze voorbeelden tonen aanvaardbare bestandsnamen voor
156 bestanden die klassen bevatten uit de voorbeelden in de vorige
159 <para><programlisting role="php">Zend/Db.php
161 Zend/Controller/Front.php
163 Zend/View/Helper/FormRadio.php</programlisting> Bestandsnamen moeten de
164 overeenkomst met de klassenamen respecteren, zoals hierboven
168 <sect2 id="coding-standard.naming-conventions.functions-and-methods">
169 <title>Functies en methodes</title>
171 <para>Functienamen mogen alleen alfanumerieke tekens bevatten.
172 Underscores zijn niet toegestaan. Nummers zijn toegestaan in
173 functienamen maar worden afgeraden.</para>
175 <para>Functienamen moeten altijd met een kleine letter
176 beginnen. Indien een functienaam bestaat uit meer dan één woord, moet de
177 eerste letter van elk nieuw woord een hoofdletter zijn. Dit wordt
178 de "studlyCaps" of "camelCaps" methode
181 <para>Langsprekendheid wordt aangeraden. Functienamen zouden
182 zoveel woorden moeten bevatten als praktisch is om het begrijpen van de
183 code te vergemakkelijken.</para>
185 <para>Dit zijn voorbeelden van aanvaardbare
186 functienamen: <programlisting role="php">filterInput()
190 widgetFactory()</programlisting></para>
192 <para>Voor objectgeoriënteerd programmeren zouden
193 databenaderingsmethodes altijd met "get" of "set" moeten worden
194 voorafgegaan. Bij het gebruik van ontwerppatronen, zoals het singleton
195 of factory patroon, zou de naam van de methode de patroonnaam moeten
196 bevatten indien mogelijk. Dit om het gebruik van het patroon
197 gemakkelijker herkenbaar te maken.</para>
199 <para>Functies in het globale bereik ("drijvende
200 functies") zijn toegestaan maar afgeraden. Het is aanbevolen deze
201 functies in een statische klasse te wikkelen.</para>
204 <sect2 id="coding-standard.naming-conventions.variables">
205 <title>Variabelen</title>
207 <para>Namen van variabelen mogen alleen bestaan uit alfanumerieke
208 tekens. Underscores zijn niet toegestaan. Nummers zijn toegestaan maar
209 worden afgeraden.</para>
211 <para>Voor eigenschappen die verklaard worden met het "private" of
212 "protected" concept moet het eerste teken van de functienaam een
213 enkele underscore zijn. Dit is het enige aanvaardbare gebruik van de
214 underscore in een functienaam. Eigenschappen verklaard als "public" mogen
215 nooit met een underscore beginnen.</para>
217 <para>Zoals functienamen (zie sectie 3.3, hierboven) moeten
218 namen van variabelen altijd met een kleine letter beginnen en volgen ze de
219 "camelCaps" behoofdletteringsovereenkomst.</para>
221 <para>Langsprekendheid is aangeraden. Variabelen zouden zoveel
222 woorden moeten bevatten als praktisch is. Beknopte variabelnamen zoals
223 "$i" en "$n" worden afgeraden voor alles behalve de kleinst mogelijke
224 loops. Als een loop meer dan 20 coderegels bevat, moeten de index
225 variabelen meer beschrijvende namen hebben.</para>
228 <sect2 id="coding-standard.naming-conventions.constants">
229 <title>Constanten</title>
231 <para>Namen voor constanten mogen zowel alfanumerieke tekens
232 als de underscore bevatten. Nummers zijn toegelaten in
233 constantnamen.</para>
235 <para>constantnamen moeten altijd alleen bestaan uit
236 hoofdletters wat de alfanumerieke tekens betreft.</para>
238 <para>Constanten moeten worden gedefinieerd als klasseleden
239 door het concept "const" te gebruiken. Constanten verklaren in het
240 globale bereik met "define" is toegelaten maar wordt afgeraden.</para>
244 <sect1 id="coding-standard.coding-style">
245 <title>Codestijl</title>
247 <sect2 id="coding-standard.coding-style.php-code-demarcation">
248 <title>PHP Code Afbakening</title>
250 <para>PHP code moet altijd worden afgebakend met de volledige standaard PHP
251 markeringen: <programlisting role="php">
254 ?></programlisting></para>
256 <para>Korte markeringen zijn nooit toegelaten</para>
259 <sect2 id="coding-standard.coding-style.strings">
260 <title>Strings</title>
262 <sect3 id="coding-standard.coding-style.strings.literals">
263 <title>String Literals</title>
265 <para>Wanneer een string letterlijk is (hij bevat geen variabelvervanging),
266 moet altijd de apostroof of "enkele quote" gebruikt worden om de string
267 af te bakenen: <programlisting role="php">
268 $a = 'Voorbeeld String';</programlisting></para>
271 <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
272 <title>Letterlijke strings die apostrofen bevatten</title>
274 <para>Wanneer een letterlijke string zelf apostrofen bevat is het
275 toegelaten de string af te bakenen met aanhalingstekens ("double
276 quotes"). Dit is dringend aangeraden voor SQL verklaringen:
277 <programlisting role="php">
278 $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";</programlisting>
279 De bovenstaande syntax is verkozen boven het "escapen" van de apostrofen.</para>
282 <sect3 id="coding-standard.coding-style.strings.variable-substitution">
283 <title>Variabelvervanging</title>
285 <para>Variabelvervanging is toegestaan met respect voor de volgende vormen: <programlisting role="php">
286 $greeting = "Hello $name, welcome back!";
288 $greeting = "Hello {$name}, welcome back!";</programlisting></para>
290 <para>Om uniformiteit te respecteren is deze vorm niet toegestaan: <programlisting
292 $greeting = "Hello ${name}, welcome back!";</programlisting></para>
295 <sect3 id="coding-standard.coding-style.strings.string-concatenation">
296 <title>String samenvoeging</title>
298 <para>Strings kunnen samengevoegd worden met de "." operator. Er moet steeds een spatie
299 vòòr en na de "." operator worden ingevoegd om de leesbaarheid te verbeteren: <programlisting role="php">
300 $company = 'Zend' . 'Technologies';</programlisting></para>
302 <para>Wanneer men strings samenvoegt met de "." operator is het toegelaten
303 de verklaring in meerdere regels op te breken om de leesbaarheid te vergroten.
304 In dat geval moet elke opeenvolgende regel met spaties worden opgevuld zodat
305 de "." operator uitgelijnd is onder de "=" operator: <programlisting role="php">
306 $sql = "SELECT `id`, `name` FROM `people` "
307 . "WHERE `name` = 'Susan' "
308 . "ORDER BY `name` ASC ";</programlisting></para>
312 <sect2 id="coding-standard.coding-style.arrays">
313 <title>Arrays</title>
315 <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
316 <title>Numeriek Geïndexeerde Arrays</title>
318 <para>Negatieve nummers zijn verboden voor indexen.</para>
320 <para>Een geïndexeerde array mag starten met eender welk niet negatief nummer.
321 Dit wordt evenwel afgeraden. Het is aangeraden dat alle arrays een
322 basisindex van 0 hebben.</para>
324 <para>Wanneer men een geïndexeerde array definieert met het <code>array</code>
325 concept moet er een spatie worden ingevoegd na elke komma afbakening om
326 de leesbaarheid te verbeteren: <programlisting role="php">
327 $sampleArray = array(1, 2, 3, 'Zend', 'Studio');</programlisting></para>
329 <para>Het is ook toegelaten om een geïndexeerde array op meerdere
330 regels te definieren. In dat geval moet elke opeenvolgende regel met spaties
331 worden opgevuld zodanig dat het begin van elke regel als volgt is uitgelijnd:
332 <programlisting role="php">
333 $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
335 56.44, $d, 500);</programlisting></para>
338 <sect3 id="coding-standard.coding-style.arrays.associative">
339 <title>Associatieve Arrays</title>
341 <para>Wanneer men associatieve arrays met het <code>array</code>
342 concept definieert is het aangeraden de verklaring in meerdere regels op te
343 breken. In dat geval moet elke opeenvolgende regel met spaties worden
344 opgevuld zodat de indexen (keys) en waarden (values) uitgelijnd zijn:
345 <programlisting role="php">
346 $sampleArray = array('firstKey' => 'firstValue',
347 'secondKey' => 'secondValue');</programlisting></para>
351 <sect2 id="coding-standard.coding-style.classes">
352 <title>Klassen</title>
354 <sect3 id="coding-standard.coding-style.classes.declaration">
355 <title>Klasse Verklaring</title>
357 <para>Klassebenaming moet de volgende overeenkomsten volgen.</para>
359 <para>De accolade wordt steeds op de regel onder de klassenaam geschreven
360 ("one true brace" vorm).</para>
362 <para>Elke klasse moet een documentatieblok hebben dat de PHPDocumentor
363 standaard volgt.</para>
365 <para>Code in een klasse moet geïndenteerd zijn met vier spaties.</para>
367 <para>Eén klasse, éen bestand.</para>
369 <para>Bijkomende code schrijven in een klassebestand is toegelaten maar wordt
370 afgeraden. Indien men het toch doet moet de bijkomende code met twee lege
371 regels worden gescheiden van de klassecode.</para>
373 <para>Dit is een voorbeeld van een aanvaardbare klasseverklaring:
374 <programlisting role="php">
376 * Documentatie Blok Hier
380 // de gehele inhoud van de klasse
381 // moet geindenteerd worden met vier spaties
382 }</programlisting></para>
385 <sect3 id="coding-standard.coding-style.classes.member-variables">
386 <title>Klasse lidvariabelen</title>
388 <para>Lidvariabelen moeten benaamd worden volgens de variabele
389 benamingsovereenkomst.</para>
391 <para>Variabelen die in de klasse worden verklaard moeten bovenaan
392 in de klasse worden opgesomd, vòòrdat functies worden verklaard.</para>
394 <para>Het concept <code>var</code> is niet toegestaan. Lidvariabelen
395 moeten steeds hun zichtbaarheid verklaren door één van de <code>private</code>,
396 <code>protected</code>, of <code>public</code> concepten te gebruiken.
397 Toegang verlenen aan lidvariabelen door hen publiek te maken is toegestaan
398 maar wordt afgeraden ten voordele van de databenaderingsmethodes (set/get).</para>
402 <sect2 id="coding-standard.coding-style.functions-and-methods">
403 <title>Functies en Methodes</title>
405 <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
406 <title>Functie en Methode Verklaring</title>
408 <para>Functiebenaming moet de benamingsovereenkomsten volgen.</para>
410 <para>Functies binnen klasses moeten steeds hun zichtbaarheid verklaren
411 door één van de <code>private</code>, <code>protected</code>, of
412 <code>public</code> concepten te gebruiken.</para>
414 <para>Net zoals klassen, moet de accolade steeds op de regel onder de functienaam
415 worden geschreven ("one true brace" vorm). Er is geen spatie tussen de functienaam
416 en de haakjes voor de argumenten. Er is één spatie tussen de sluitende haakjes en de
419 <para>Functies in het globale bereik zijn zeer sterk afgeraden.</para>
421 <para>Dit is een voorbeeld van een aanvaardbare verklaring van een functie in een klasse:
422 <programlisting role="php">
424 * Documentatie blok hier
426 function sampleMethod($a)
428 // de gehele inhoud van de functie
429 // moet geindenteerd worden met vier spaties
430 }</programlisting></para>
432 <para><emphasis>NOTA:</emphasis> Doorgeven per verwijzing (pass by reference) is
433 alleen toegestaan in de functieverklaring: <programlisting role="php">
434 function sampleMethod(&$a)
435 {}</programlisting></para>
437 <para>Call-time pass by reference is verboden.</para>
439 <para>De terugkeerwaarde mag niet tussen haakjes worden ingesloten.
440 Dat kan de leesbaarheid hinderen en kan ook de code breken indien een
441 methode later wordt veranderd om per verwijzing terug te sturen.
442 <programlisting role="php">
446 return($this->bar);
449 return $this->bar;
450 }</programlisting></para>
453 <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
454 <title>Functie- en Methodegebruik</title>
456 <para>Functie-argumenten worden gescheiden door één enkele spatie
457 na de komma afbakening. Dit is een voorbeeld van een aanvaardbare
458 functie-aanroep voor een functie die drie argumenten heeft:
459 <programlisting role="php">
460 threeArguments(1, 2, 3);</programlisting></para>
462 <para>Call-time pass by reference is verboden. Zie de sectie over
463 functieverklaringen voor de juiste wijze om argumenten per verwijzing door te
466 <para>Voor functies welke arrays als argument aanvaardden mag de
467 functieaanroep het "array" concept bevatten en kan deze in meerdere
468 regels worden opgesplitst om de leesbaarheid te vergroten.
469 In deze gevallen blijven de regels voor het schrijven van arrays van
470 kracht: <programlisting role="php">
471 threeArguments(array(1, 2, 3), 2, 3);
473 threeArguments(array(1, 2, 3, 'Zend', 'Studio',
475 56.44, $d, 500), 2, 3);</programlisting></para>
479 <sect2 id="coding-standard.coding-style.control-statements">
480 <title>Control Statements</title>
482 <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
483 <title>If / Else / Elseif</title>
485 <para>Control statements gebaseerd op <code>if</code> en
486 <code>elseif</code> concepten moeten een enkele spatie voor de openende
487 haakjes van de conditie, en een enkele spatie na de sluitende haakjes.</para>
489 <para>In de voorwaardeverklaringen tussen de haakjes moeten
490 operators gescheiden worden met spaties om de leesbaarheid te
491 bevorderen. Binnenhaakjes zijn aangeraden voor het groeperen van
492 meer complexe voorwaarden.</para>
494 <para>De openingsaccolade wordt op dezelfde regel als de
495 voorwaardeverklaring geschreven. De sluitende accolade wordt altijd op
496 een alleenstaande regel geschreven. Alle inhoud binnenin de accolades
497 moet steeds met vier spaties geïndenteerd worden.
498 <programlisting role="php">
501 }</programlisting></para>
503 <para>Voor "if" verklaringen die "else if" of "else" inhouden moet de vorm
504 zoals in de volgende voorbeelden zijn: <programlisting role="php">
514 } else if ($a == 3) {
518 }</programlisting> PHP laat het toe om in bepaalde gevallen deze verklaringen zonder
519 accolades te schrijven. De codestandaard maakt geen verschil en alle "if",
520 "else if" of "else" verklaringen moeten accolades gebruiken.</para>
522 <para>Het gebruik van "elseif" is toegestaan maar "else if" wordt sterk
526 <sect3 id="coding-standards.coding-style.control-statements.switch">
527 <title>Switch</title>
529 <para>Control statements geschreven met "switch" moeten een enkele spatie
530 voor de openende haakjes van de voorwaardeverklaring hebben, en een enkele
531 spatie na de sluitende haakjes.</para>
533 <para>Alle inhoud binnen een "switch" verklaring moet met vier spaties
534 geïndenteerd worden. Inhoud onder elke "case" moet geïndenteerd worden
535 met vier extra spaties.</para>
537 <programlisting role="php">
538 switch ($numPeople) {
549 <para><code>default</code> mag nooit weggelaten worden van een
550 <code>switch</code> verklaring.</para>
552 <para><emphasis>NOTA:</emphasis> Het is soms handig een <code>case</code>
553 verklaring te hebben die doorvalt naar de volgende <code>case</code>
554 verklaring door het weglaten van <code>break</code> of <code>return</code>
555 in de verklaring. Om deze gevallen van bugs te onderscheiden moet elk
556 van de gevallen waarin een <code>break</code> of <code>return</code>
557 wordt weggelaten een commentaar "// break intentionally omitted"
562 <sect2 id="coding-standards.inline-documentation">
563 <title>Inline Documentatie</title>
565 <sect3 id="coding-standards.inline-documentation.documentation-format">
566 <title>Documentatie Formaat</title>
568 <para>Alle documentatieblokken ("docblocks") moeten compatibel zijn
569 met het phpDocumentor formaat. Een beschrijving van het
570 phpDocumentor formaat is buiten het bereik van dit document.
571 Voor meer informatie kunt u terecht op: <ulink
572 url="http://phpdoc.org/">http://phpdoc.org"</ulink></para>
574 <para>Alle broncodebestanden geschreven voor het Zend Framework of dat
575 ermee samenwerkt moet een "file-level" docblock bevatten aan het begin
576 van elk bestand en een "class-level" docblock onmiddellijk boven elke
577 klasse. Hierna enkele voorbeelden van zulke docblocks.</para>
580 <sect3 id="coding-standards.inline-documentation.files">
581 <title>Bestanden</title>
583 <para>Elk bestand dat PHP code bevat moet een hoofdblok aan het
584 begin van het bestand bevatten dat minstens de volgende
585 phpDocumentor gegevens bevat: <programlisting role="php">
587 * Korte beschrijving van het bestand
589 * Lange beschrijving van het bestand (indien aanwzeig)...
591 * LICENSE: Licentie informatie
593 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
594 * @license http://www.zend.com/license/3_0.txt PHP License 3.0
596 * @link http://dev.zend.com/package/PackageName
597 * @since File available since Release 1.2.0
598 */</programlisting></para>
601 <sect3 id="coding-standards.inline-documentation.classes">
602 <title>Klassen</title>
604 <para>Elke klasse moet een docblock bevatten dat minstens
605 de volgende phpDocumentor gegevens bevat: <programlisting role="php">
607 * Korte beschrijving van de klasse
609 * Lange beschrijving van de klasse (indien aanwezig)...
611 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
612 * @license http://www.zend.com/license/3_0.txt PHP License 3.0
613 * @version Release: @package_version@
614 * @link http://dev.zend.com/package/PackageName
615 * @since Class available since Release 1.2.0
616 * @deprecated Class deprecated in Release 2.0.0
617 */</programlisting></para>
620 <sect3 id="coding-standards.inline-documentation.functions">
621 <title>Functies</title>
623 <para>Elke functie, methodes inbegrepen, moet een docblock hebben
624 dat minstens het volgende bevat: <itemizedlist>
626 <para>Een beschrijving van de functie</para>
630 <para>Alle argumenten</para>
634 <para>Alle mogelijke terugwaarden</para>
636 </itemizedlist></para>
638 <para>Het is niet nodig om de "@access" tags te gebruiken
639 want de zichtbaarheid is reeds bekend via het gebruik van
640 "public", "private", of "protected" bij het verklaren van de
643 <para>Indien een functie of methode een exception mag teruggeven,
645 <programlisting role="php">
646 @throws exceptionClass [beschrijving]
647 </programlisting></para>