<?php

// ------------------------------------------------------------------------- //
// Chargement de functions perso à la volée                                  //
// ------------------------------------------------------------------------- //
// Auteur: Florent                                                           //
// Email:  florent@kzar.net                                                  //
// Web:    http://www.kzar.net                                               //
// ------------------------------------------------------------------------- //

// Plutôt que d'avoir à mettre toutes vos fonctions persos dans un gros fichier
// de bibliothèque à inclure à chaque fois, voici un petit fichier à inclure
// dans vos scripts qui permet de charger dynamiquement vos bibliothèques de
// fonctions.
// Avantages: Maintenance + facile de vos bibliothèques, scripts allégées et
// temps d'exécution plus courts car fonctions chargées uniquement en cas de
// besoin.
//
// Prérequis:
// 1 - créer un répertoir /lib à la racine de votre site (mais c'est paramétrable
//     par vos soins bien entendu!)
// 2 - dans ce répertoire, chaque fonction doit être dans un fichier propre qui
//     est nommé nomdelafonction.inc
// 3 - dans vos pages PHP, inclure ce script.
//
// Exemple:
// J'ai créé une fonction validEmail($email) qui me renvoie true ou false.
// Je la met dans le fichier /lib/validEmail.inc
//
// Dans ma page PHP, je l'utilise comme suit:
// include("lib/FunctionLoader.inc");
//
// if(NewFct(validEmail,"toto@domain.tld") == true)
//  echo "Adresse valide!";
// else
//  echo "Adresse invalide!";
// ------------------------------------------------

### Chargement de functions "à la volée"
###
### $mixed_returned_vars = NewFct(string fonction_name [, mixed vars]);
function NewFct($fct)
{
        
$vars = '';

        
## a-t-on fourni des arguments ?
        
if(func_num_args()>1)
        {
                for(
$i=1;$i<(func_num_args()-1);$i++)
                {
                        
$t[$i] = func_get_arg($i);
                        
$vars.="\$t[$i],";
                }
                
$t[$i] = func_get_arg($i);
                
$vars.="\$t[$i]";
        }

        
## a-t-on déjà appelé cette fonction?
        
if(!defined('_FCT_'.strtoupper($fct).'_'))
        {
                if(@include_once (
"lib/$fct.inc"))
                        
define('_FCT_'.strtoupper($fct).'_',true);
                else
                        return
false;
        }

        if(
$vars!='')
        {
                
//echo "\$ret = $fct_file($vars)<br>";
                
eval("\$ret = $fct($vars);");
                unset (
$vars);
                unset (
$t);
        }
        else
        {
                
//echo "\$ret = $fct_file()<br>";
                
eval("\$ret = $fct();");
        }
        return
$ret;
}

?>