Logo 6tech
Accueil du site > Tutoriaux > La surcharge de fonctions

La surcharge de fonctions

Qui n’a jamais voulu créer deux fonctions différentes mais avec un profil relativement proche ( même nom, mais le dernier paramètre serait un entier supplémentaire par exemple) ou alors a défini maladroitement la même fonction dans plusieurs fichiers mais décide de modifier son profil ?

Il existe pour cela plusieurs méthodes qui dépendent majoritairement de la structure que vous employez.

 Appel de fonction classique

Cette solution consiste à créer une fonction sans paramètres ( ou avec uniquement les arguments communs à la fonction de base et ses éventuelles surcharges ) et d’appliquer un traitement différent en fonction du nombre d’arguments passés en paramètres grâce aux fonctions : func_get_args() et func_num_args()

Exemple de fonction à nombre d’argument variable On veut récupérer le plus grand nombre parmi les paramètres fournis à la fonction si leur nombre est pair, ou le plus petit si leur nombre est impair.

<?php
function minMaxFromValue(){
    
$argsCount func_num_args();
    
$argsList func_get_args();
    
$selected $argsList[0];
    for(
$i=1;$argsCount;$i++)
        if( 
$argsCount%2==
            
$args[$i] > $selected :
            
$args[$i] < $selected )
                
$selected $args[$i];
    return 
$selected;
}
?>

On peut donc influencer le comportement d’une fonction à travers son nombre d’argument.

Une autre méthode plus simple consiste à positionner des arguments à des valeurs par défaut dans le cas où ils ne sont pas spécifiés.

Exemple de fonction à argument par défaut Un exemple sur les pizzas.

<?php

$nb_pizza 
0;

function 
ajouter_pizza($action '',$nb 1){
    
    global 
$nb_pizza;
    
    switch(
$action){
    
    case 
'affichage':
    echo 
'Nombre de pizza actuel : '.$nb_pizza.'<br>';
    break;
    
    case 
'envoyer':
    
$nb_pizza $nb_pizza $nb;
    echo 
'Il reste encore '.$nb_pizza.' pizza(s)<br>';
    break;
    
    case 
'':
    
$nb_pizza $nb_pizza $nb;
    break;
    
    }
}

ajouter_pizza('',3); // ajoute 3 pizza
ajouter_pizza('affichage'); // affiche les pizzas
ajouter_pizza(); // ajoute 1 pizza ( valeur par défaut)
ajouter_pizza('affichage'); // affiche les pizzas
ajouter_pizza('envoyer'2); // Enlève 2 pizzas et affiche le nombre restant
?>

bas de page Contact - EIC 6tech  - SIRET : 479 088 270 00018 - Tel: 0970 406 988 - © 2009