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: 0870 406 988 - © 2008