• PHP deel 6: Functies

    2 March 2011 01:01 door
    Functies maken het makkelijk om code te hergebruiken. Voorkom dat je steeds je code opnieuw moet typen en maak het jezelf gemakkelijker door slechts 1x een aanpassing te doen i.p.v. 100 keer.



    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
        
    }
    ?>
    De functie in dit voorbeeld heeft twee parameters, de tweede parameter is optioneel en heeft als standaard waarde 'test'. Wanneer we een & voor de parameter plaatsen wordt dit een reference naar de originele variabelen. Als we deze variabele nu wijzigen in de functie worden deze wijzigingen ook doorgevoerd in de originele variabele die gebruikt werd bij de functie-aanroep.
    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 == ) {
                
    //Twee parameters
                
    $param1 func_get_arg);
                
    $param2 func_get_arg);
            } elseif ( 
    $nArgs == ) {
                
    //1 parameter
                
    $param1 func_get_arg);
            }
            
        }
    ?>
    De functie func_get_args() geeft een array met alle parameters.

    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 ) {
                return 
    1;
            } else {
                return ( 
    $getal faculteit$getal-) );
            }
        }
    ?>
    6.2 Scope

    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
        
    }
    ?>
    6.3 Handige functies

    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!
    }

    ?>
    Geschreven door: Martijn Croonen.
    Aanpassingen door: Aerts Kurt.
    Reacties 1 Reactie
    1. Spoorzoeker's schermafbeelding
      Spoorzoeker -
      Ik heb vaak moeite met of je nu wel of niet een waarde moet meegeven en of er nu wel of niet een waarde teruggegeven word.
      Onbewust heb ik dit probleem omzeild door ipv functies includes te gebruiken.