Nov 19 2008
Povinné parametry funkcí v PHP
Vždycky jsem si myslel, že pokud není u funkce v PHP definován parametr jeho defaultní hodnotou — function Foo($a = ''){}
— bere se, že je parametr povinný. Moje chyba, PHP mě opět vypeklo a přitom v tak elementární věci.
Mějme příklad:
<?php function Bar($stuf) { echo $stuf; } Bar();
výsledek:
Warning: Missing argument 1 for Bar(), called in /var/www/error.php on line 6 and defined in /var/www/error.php on line 2
Notice: Undefined variable: stuf in /var/www/error.php on line 4
Výstup mě nemile překvapil, nejen že volání funkce nepadne na Fatal Error ale navíc se tělo funkce provede s nedefinovanou hodnotou proměnné $stuf
. Asi bude třeba na každý parametr volat isset(...)
. Jak geniální. Zdá se že povinné parametry v PHP neexistují.
Myslím že krása PHP spočívá právě v jeho nevyzpytatelnosti ;) Takže zkusme ještě podobný příklad, s určením typu “nepovinného” parametru:
<?php function Bar(array $stuf) { echo $stuf; } Bar();
Výsledek je pak zcela logicky a jasně odvoditelný (!?!):
Catchable fatal error: Argument 1 passed to Bar() must be an array, none given, called in /var/www/error.php on line 6 and defined in /var/www/error.php on line 2
A proto v PHP rád programuji … spousty let a stále se učím základům :))
Vyzkoušeno na PHP 5.2.6.
Comments Off