Wat heeft die gast nu weer te zeiken?
Wat mij nu de laatste paar dagen steeds vaker in het oog prikt is dat mensen code posten met constructies als deze:
of
En wat is daar dan mis aan?
Zo nutteloos als de functie is laat hij wel een veel gemaakte fout zien.
Je mag _nooit_ in PHP (en in practies alle talen) zo maar argumenten weglaten in de aanroep van de functie en zeker niet op een dusdanige manier controleren of ze bestaan (al is het beter dan helemaal niet).
Note:[edit]
Met 'zo maar weglaten' doel ik op het 'vergeten' van argumenten bij de aanroep van een functie terwijl je ze WEL in de functie-definitie hebt staan. Dus nadrukkelijk _NIET_ als je ze 'default' of een variabele function list gebruikt.
Wat nou man, ik krijg toch geen error ofzo!
Zet voor de grap eens 'error_reporting(E_ALL);' erboven en je zal zien dat je een Warning krijgt dat je variabele niet geset is.
Ok snappez-vous, maar hoe kan ik dan wel variabelen 'weglaten'
Dat kan bv door ze een default waarde te geven in de functie definitie.
Als je nu het 3e argument leeg laat dan word er automagisch '' (lege string) assigned. Als je het 2e EN 3e argument leeg laat gebeurt het bij beide.
Note: Je mag/kan alleen static values gebruiken, dus wel:
• $a = 'string'
• $a = 123
• $a = DEFINED_VAR
Maar NIET:
• $a = func_result()
• $a = 4/10
• $a = "str"."ing"
• $a = $var
Ok maar ik wil de 3e variabele graag defaulten en de 4e niet
Dan zal je ze moeten omwisselen
(of even doorlezen)
Ok maar ik heb nu altijd een variabel aantal variabelen. Hoe moet dat dan!
Daar heeft php 3 leuke functies voor namelijk:
• func_num_args
• func_get_args
• func_get_arg
Nu zijn hier extreem duidelijke manual pages voor maar ik zal een klein (onzinnig) voorbeeldje geven.
Ik hoop dat wat mensen hier iets aan hebben en dat we hier minder van die 'ranzige' (no offence) structuren (hier) tegen komen.
En natuurlijk nog de 2 belangrijkste dingen voor het coden in PHP
• indenting! - altijd en overal
• error_reporting(E_ALL)! - netjes leren coden, zonder fouten
Wat mij nu de laatste paar dagen steeds vaker in het oog prikt is dat mensen code posten met constructies als deze:
PHP:
1
2
3
4
5
6
7
8
9
10
| <? function printConcat($inVar, $inVar2, $inVar3) { $tmpString = $inVar; if(!isset($inVar2)) $tmpString .= $inVar2; if(!isset($inVar3)) $tmpString .= $inVar3; print $tmpString; } ?> |
of
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| <? function printConcat($inVar, $inVar2, $inVar3) { if(!isset($inVar2)) $inVar2 = ''; if(!isset($inVar3)) $inVar3 = ''; $tmpString = $inVar.$inVar2.$inVar3; print $tmpString; } ?> |
En wat is daar dan mis aan?
Zo nutteloos als de functie is laat hij wel een veel gemaakte fout zien.
Je mag _nooit_ in PHP (en in practies alle talen) zo maar argumenten weglaten in de aanroep van de functie en zeker niet op een dusdanige manier controleren of ze bestaan (al is het beter dan helemaal niet).
Note:[edit]
Met 'zo maar weglaten' doel ik op het 'vergeten' van argumenten bij de aanroep van een functie terwijl je ze WEL in de functie-definitie hebt staan. Dus nadrukkelijk _NIET_ als je ze 'default' of een variabele function list gebruikt.
Wat nou man, ik krijg toch geen error ofzo!
Zet voor de grap eens 'error_reporting(E_ALL);' erboven en je zal zien dat je een Warning krijgt dat je variabele niet geset is.
Ok snappez-vous, maar hoe kan ik dan wel variabelen 'weglaten'
Dat kan bv door ze een default waarde te geven in de functie definitie.
PHP:
1
2
3
4
5
6
7
8
9
| <? function printConcat($inVar, $inVar2 = '', $inVar3 = '') { $tmpString = $inVar.$inVar2.$inVar3; print $tmpString; } ?> |
Als je nu het 3e argument leeg laat dan word er automagisch '' (lege string) assigned. Als je het 2e EN 3e argument leeg laat gebeurt het bij beide.
Note: Je mag/kan alleen static values gebruiken, dus wel:
• $a = 'string'
• $a = 123
• $a = DEFINED_VAR
Maar NIET:
• $a = func_result()
• $a = 4/10
• $a = "str"."ing"
• $a = $var
Ok maar ik wil de 3e variabele graag defaulten en de 4e niet
Dan zal je ze moeten omwisselen
Ok maar ik heb nu altijd een variabel aantal variabelen. Hoe moet dat dan!
Daar heeft php 3 leuke functies voor namelijk:
• func_num_args
• func_get_args
• func_get_arg
Nu zijn hier extreem duidelijke manual pages voor maar ik zal een klein (onzinnig) voorbeeldje geven.
PHP:
1
2
3
4
5
6
7
8
9
10
| <? function unknownArgs() { $theArgs = func_get_args(); // array van de argumenten $numArgs = func_num_args(); // zelfde als count($theArgs) $firstArg = func_get_arg(0); // het eerste argument $forthArg = func_get_arg(3); // en numero 4 } ?> |
Ik hoop dat wat mensen hier iets aan hebben en dat we hier minder van die 'ranzige' (no offence) structuren (hier) tegen komen.
En natuurlijk nog de 2 belangrijkste dingen voor het coden in PHP
• indenting! - altijd en overal
• error_reporting(E_ALL)! - netjes leren coden, zonder fouten