Net zoals alle andere talen kent PHP ook functies, met functies kunnen we stukken code groeperen en herbruiken. Je kan ook parameters meegeven aan een functie. Een functie in PHP heeft altijd een return waarde, als deze niet expliciet wordt aangegeven met het keyword return is deze 'null'.
De naamgeving voor functies is aan dezelfde voorwaarden gebonden als bij variabelen, hoofdlettergevoelig, niet met een cijfer beginnen en alleen alfanumerieke karakters + (_). Omdat PHP weakly typed is ondersteund PHP geen function overloading, alle functies moeten dus een unieke naam hebben.
De syntax voor een functie in PHP is als volgt:
PHP-code:
<?php
function bar ( $foo, $a = 'test' ) {
// code
}
?>
PHP-code:
<?php
function bar ( $foo ) {
$foo = 3;
}
function bar2 ( &$foo ) {
$foo = 3;
}
$a = 1;
bar( $a );
echo $a; // $a is hier nog steeds 1
bar2( $a );
echo $a; // $a is hier 3
?>
Uitgebreide uitleg over references vind je op php.net.
Het probleem van function overloading kan je op twee manieren oplossen, je kan ofwel werken met optionele parameters met een standaard waarde of je kan gebruik maken van de functies func_num_args(), func_get_arg(), func_get_args() zoals in volgend voorbeeld.
PHP-code:
<?php
function bar ( ) {
$nArgs = func_num_args( );
if ( $nArgs == 2 ) {
//Twee parameters
$param1 = func_get_arg( 0 );
$param2 = func_get_arg( 1 );
} elseif ( $nArgs == 1 ) {
//1 parameter
$param1 = func_get_arg( 0 );
}
}
?>
Een lijst met alle functies die standaard beschikbaar zijn in PHP kan je vinden op php.net.
6.1 Recursie
Een recursieve functie is een functie die zichzelf aanroept, in dit voorbeeld bereken we de faculteit van een getal.
PHP-code:
<?php
function faculteit( $getal ) {
if( $getal < 2 ) {
return 1;
} else {
return ( $getal * faculteit( $getal-1 ) );
}
}
?>
De scope van een variabele is de ruimte waarin de variabelen beschikbaar is. Er zijn drie verschillende scope's in PHP: Global, Function en class. Variabelen in de global scope zijn overal beschikbaar, variabelen in de function en class scope zijn alleen beschikbaar in de desbetreffende functies en klasse.
Als we in PHP echter een functie gebruiken maakt PHP een nieuwe scope aan waar standaard geen variabelen inzitten, als we dus variabelen uit de global scope willen gebruiken in een functie moeten we deze eerste in de function scope steken mbv het keyword global of door de superglobal $GLOBALS te gebruiken:
PHP-code:
<?php
$a = 'aaa';
$b = 'bbb';
function faculteit( $getal ) {
// $a en $b zijn hier niet beschikbaar
global $a, $b;
// Nu wel
echo $a . ' ' .$b;
echo $GLOBALS[ 'a' ] . ' ' . $GLOBALS[ 'b' ];
// Beide oplossingen geven hetzelfde resultaat
}
?>
Het verkrijgen van een ip adres van een gebruiker waarbij we eerst een server variable controleren. Om dit niet steeds opnieuw te moeten schrijven steken we het in een handige functie.
PHP-code:
<?php
/*
Houd er rekening mee dat het ipadres leeg kan zijn of
totaal incorrect vertrouw dus niet op deze data!
*/
function getIP()
{
if(!empty($_SERVER['HTTP_CLIENT_IP'])) // IP adres van share internet?
$ip = $_SERVER['HTTP_CLIENT_IP'];
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) // IP adres word door proxy door gegeven?
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
else
$ip = $_SERVER['REMOTE_ADDR'];
return $ip; // Terug geven ip!
}
?>
Aanpassingen door: Aerts Kurt.
Systeembericht