User-defined functions
Door de gebruiker gedefinieerde functies
Een functie wordt gedefinieerd met het sleutelwoord, een naam, een lijst van parameters (die leeg kan zijn) gescheiden door komma's () omgeven door haakjes, gevolgd door de body van de functie omgeven door accolades, zoals het volgende: function,
Voorbeeld: Een nieuwe functie genaamd declareren
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Voorbeeld functie.\n";
return $retval;
}
?>
Opmerking: > Vanaf PHP 8.0.0 kan de lijst van parameters een afsluitende komma hebben:
```php
Elke geldige PHP-code kan binnen de body van een functie verschijnen, zelfs andere functies en class-definities.
Function-namen volgen dezelfde regels als andere labels in PHP. Een geldige function-naam begint met een letter of underscore, gevolgd door een willekeurig aantal letters, cijfers of underscores. Als een reguliere expressie zou het als volgt worden uitgedrukt: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
Functies hoeven niet gedefinieerd te zijn voordat ze worden aangeroepen, wanneer een functie voorwaardelijk wordt gedefinieerd zoals in de twee onderstaande voorbeelden.
behalve
Wanneer een functie op een voorwaardelijke manier wordt gedefinieerd, zoals in de twee getoonde voorbeelden. De definitie moet worden verwerkt voordat deze kan worden aangeroepen.
voorafgaand aan
Voorbeeld: Voorwaardelijke functies
<?php
$makefoo = true;
/* We kunnen foo() hier niet aanroepen
omdat het nog niet bestaat,
maar we kunnen bar() aanroepen */
bar();
if ($makefoo) {
function foo()
{
echo "Ik besta niet totdat de program execution mij bereikt.\n";
}
}
/* Nu kunnen we foo() veilig aanroepen
aangezien $makefoo geëvalueerd is naar true */
if ($makefoo) foo();
function bar()
{
echo "Ik besta onmiddellijk bij de start van het programma.\n";
}
?>
Voorbeeld: Functies binnen functies
<?php
function foo()
{
function bar()
{
echo "Ik besta niet totdat foo() wordt aangeroepen.\n";
}
}
/* We kunnen bar() nog niet aanroepen
omdat het niet bestaat. */
foo();
/* Nu kunnen we bar() aanroepen,
foo()'s verwerking heeft
het toegankelijk gemaakt. */
bar();
?>
Alle functies en klassen in PHP hebben de globale scope - ze kunnen buiten een functie worden aangeroepen, zelfs als ze binnen zijn gedefinieerd en vice versa.
PHP ondersteunt geen function overloading, noch is het mogelijk om eerder gedefinieerde functies te undefineren of opnieuw te definiëren.
Opmerking: > Function-namen zijn niet hoofdlettergevoelig voor de ASCII-tekens A tot Z, hoewel het meestal goed is om functies aan te roepen zoals ze in hun declaratie verschijnen.
Beide func_num_args en func_get_arg zijn ondersteund in functies. Zie ook de functie referenties voor func_get_args voor meer informatie.
Het is mogelijk om recursieve functies in PHP aan te roepen.
Voorbeeld: Recursieve functies
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
Opmerking: > Recursieve functie/methode-aanroepen met meer dan 100-200 recursieniveaus kunnen de stack overbelasten en leiden tot beëindiging van het huidige script. Vooral oneindige recursie wordt beschouwd als een programmeerfout.