Nov 19 2008

Povinné parametry funkcí v PHP

Tag: PHPJens @ 00:20

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.