« Programmation PHP/Fonctions » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (- l'on + l’on )
m Robot : Remplacement de texte automatisé (- qu'à + qu’à )
Ligne 36 : Ligne 36 :


=== Portée des variables ===
=== Portée des variables ===
Le problème de portée des variables est assez réduit en PHP. Une fonction n'a accès qu'à ses arguments, ses propres variables et aux variables globales importées statiquement (mot clé <code>global</code>). De ce fait, il y a peu de confusion.
Le problème de portée des variables est assez réduit en PHP. Une fonction n'a accès qu’à ses arguments, ses propres variables et aux variables globales importées statiquement (mot clé <code>global</code>). De ce fait, il y a peu de confusion.


Toujours suivant le même principe, les variables utilisées dans une fonction sont toutes détruites à sa sortie (les variables globales non, bien entendu).
Toujours suivant le même principe, les variables utilisées dans une fonction sont toutes détruites à sa sortie (les variables globales non, bien entendu).
Ligne 146 : Ligne 146 :
* '''func_get_args''' : permet de récupérer la valeur d'un argument (retourne un tableau de valeur).
* '''func_get_args''' : permet de récupérer la valeur d'un argument (retourne un tableau de valeur).


Ces deux fonctions ne peuvent s'utiliser qu'à l'intérieur d’une fonction; dans le cas contraire un message d'erreur s'affichera.
Ces deux fonctions ne peuvent s'utiliser qu’à l'intérieur d’une fonction; dans le cas contraire un message d'erreur s'affichera.


{{Exemple
{{Exemple

Version du 27 avril 2016 à 17:13

{{Chapitre}} : paramètre titre chapitre manquant, dans paramètre titre ouvrage manquant, chap. 6

Déclaration de fonction

PHP permet bien entendu d'écrire ses propres fonctions. Notez bien que ce cours n'étant pas un cours d'algorithmique, il y sera simplement expliqué comment utiliser les fonctions en PHP.

Utilisation

Pour déclarer une fonction en PHP, il suffit d'utiliser le mot-clef function. Comme le langage n'est pas typé, une fonction peut retourner n’importe quel type de valeur (chaîne, entier…) ou ne rien retourner du tout. Enfin, ses arguments peuvent avoir des valeurs par défaut.

Début d’un principe
Fin du principe


Le principe de base est très simple à saisir.

Notez que lorsqu'une fonction arrive à un return, elle l'effectue puis se termine, même s'il y a d'autres instructions après.

Portée des variables

Le problème de portée des variables est assez réduit en PHP. Une fonction n'a accès qu’à ses arguments, ses propres variables et aux variables globales importées statiquement (mot clé global). De ce fait, il y a peu de confusion.

Toujours suivant le même principe, les variables utilisées dans une fonction sont toutes détruites à sa sortie (les variables globales non, bien entendu).

Exemple
$valeur1=10;
$valeur2=20;

function exemple($valeur) {
global $valeur1; // récupération de la valeur globale de $valeur1
$valeur3=5;
$calcul=$valeur1+$valeur2+$valeur3+$valeur; // 10 + 0 + 5 + le paramètre qui sera entre parenthèses. 
//$valeur2 n'ayant pas été définie comme valeur globale, la variable $valeur2 est donc vide.
return $calcul;
}

echo exemple(2); // affiche 17


On peut aussi trouver un peu plus compliqué si vous utilisez deux fichiers. L'un pour les variables, l'autre pour les traitements.

Début d’un principe
Fin du principe


Début d’un principe
Fin du principe


Espaces de noms

Depuis PHP 5.3.0, des espaces de noms peuvent être définis pour cloisonner certains objets, à l'aide du mot clé namespace utilisé en début de fichier[1]. Exemple de définition :

<?php
 namespace Projet1;
...

Soit un fichier TestNS.php suivant :

<?php
 namespace Projet1\SousProjet2;

 function Fonction1() {
  echo "Fonction exécutée.\n";
  echo __NAMESPACE__;
 }
?>

Logo

Le fichier doit être encodé en ANSI (pas en Unicode sous peine d’être obligé de coller le mot "namespace" à "?php").

Exemple d’utilisation :

<?php
 require 'TestNS.php';
 Projet1\SousProjet2\Fonction1();
?>
 Par convention, l'arborescence du système de fichiers correspond à celle des espaces de noms. Dans l'exemple ci-dessus, il faudrait donc placer le fichier dans Projet1\SousProjet2\TestNS.php et faire plutôt require 'Projet1\SousProjet2\TestNS.php';

Références de variables

Les références sont utiles lorsque l’on souhaite retourner plusieurs valeurs dans une fonction. On utilise alors le passage d'argument par référence, qui fait que quand une fonction modifie un argument, la valeur de la variable du programme principale change aussi.

Pour utiliser un argument en tant que référence, il suffit d'y mettre le symbole & devant, dans la déclaration de la fonction.

Un exemple concret devrait vous faire comprendre :

Exemple
function foo(&$arg1, &$arg2, $arg3)
{
 $arg1 = 4;
 $arg2 = 6;
 $arg3 = 8;
}

foo($var1, $var2, $var3);
print $var1;  //affichera 4
print $var2;  //affichera 6
print $var3;  //affichera NULL car $arg3 n'est pas une référence (pas de &)


Les fonctions variables

On appelle "fonction variable" une fonction dont on ne peut prédire le nombre d'arguments. Ce genre de fonction pourra se révéler pratique pour exécuter certains codes répétitifs ou le programmeur n'a pas envie de recopier le nom de la fonction pour n valeurs.

Pour cela, il faut retenir deux fonctions importantes :

  • func_num_args : permet de compter le nombre d'arguments (retourne true ou false).
  • func_get_args : permet de récupérer la valeur d'un argument (retourne un tableau de valeur).

Ces deux fonctions ne peuvent s'utiliser qu’à l'intérieur d’une fonction; dans le cas contraire un message d'erreur s'affichera.

Exemple
function afficher_variables ()
{
 $nb_args = func_num_args();
 $list_args = func_get_args();
 
 for ($i = 0; $i < $nb_args; $i++)
 {
  echo $list_args[$i].' ';
 }
}
$var1 = 'programmeur';
afficher_variables('Je suis', $var1, ', c\'est utile', ', c\'est intéressant.'); // Et on peut en rajouter autant que nécessaire.


Le code se comprend de lui-même. Il affichera : Je suis programmeur, c’est utile, c’est intéressant.

Références