Médiaforma

All posts tagged variables

Pour insérer des variables dans une requête MySQL, vous utiliserez des “requêtes préparées” :

$retour = $base->prepare('requête');

Où requête est une requête MySQL qui contient un ou plusieurs caractères “?”. Par exemple :

SELECT * FROM base WHERE champ1=? AND champ2=?

Les caractères “?” seront remplacés par des valeurs lors de l’exécution de la méthode execute :

$retour->execute(array($var1, $var2));

Les variables définies dans le code sont utilisables partout, hormis dans les fonctions.

<?php
  $a = 10;
  function test() {
    echo "Dans la fonction, \$a = ".$a;
  }
  echo "En dehors de la fonction, \$a = ".$a."<br>";
  test();
?>

Voici le résultat de ce code.

Comme vous pouvez le voir, la variable $a est inaccessible dans la fonction. Son utilisation provoque une erreur à l’exécution. Pour corriger ce problème, il suffit de déclarer la variable $a globale à l’intérieur de la fonction. Il est alors possible de lire, mais également de modifier la variable dans la fonction.

<?php
  $a = 10;
  function test() {
    global $a;
    echo "Dans la fonction, \$a = ".$a."<br>";
    $a = 20;
  }
  echo "Avant l'exécution de la fonction, \$a = ".$a."<br>";
  test();
  echo "Après l'exécution de la fonction, \$a = ".$a."<br>";
?>

Exécutez ce code dans Wampserver. Comme vous pouvez le voir, la vatiable globale $a est bien accessible dans la fonction.

Il est même possible de la modifier globalement. La modification est répercutée dans tout le code, y compris en dehors de la fonction.

Une autre solution consiste à utiliser le tableau associatif $GLOBALS[] :

<?php
  $a = 10;
  function test() {
    echo "Dans la fonction, \$GLOBALS[\"a\"] = ".$GLOBALS["a"]."<br>";
    $GLOBALS["a"] = 20;
  }
  echo "Avant l'exécution de la fonction, \$a = ".$a."<br>";
  test();
  echo "Après l'exécution de la fonction, \$a = ".$a."<br>";
?>

Voici le résultat :

Les variables définies à l’intérieur d’une fonction ont une portée limitée à cette fonction.

Examinez ce code :

<?php
  function test() {
    $a = 10;
    echo "Dans la fonction, \$a = ".$a."<br>";
  }
  echo "Avant l'exécution de la fonction, \$a = ".$a."<br>";
  test();
  echo "Après l'exécution de la fonction, \$a = ".$a."<br>";
?>

A l’exécution, deux erreurs sont détectées : une sur la première instruction echo (car la variable $a n’est pas encore définie) et une sur la dernière instruction echo (car la variable $a n’est pas accessible en dehors de la fonction) :

Nous allons en terminer avec la portée des variables en parlant des variables statiques. La portée d’une variable statique est locale à une fonction, mais elle ne perd pas sa valeur lorsque la fonction est à nouveau appelée.

Examinez ce code :

<?php
  function test() {
    static $a = 10;
    echo "\$a = ".$a."<br>";
    $a++;
  }
  test();
  test();
  test();
  test();
?>

La variable $a est définie statique lors de son initialisation dans la fonction. Cette instruction ne sera exécutée qu’une fois. Les quatre appels de la fonction test() affichent donc successivement les valeurs 10, 11, 12 et 13 pour la variable $a :

Essayez de supprimer le mot static. Que se passe-t-il ?

Pour le savoir, exécutons ce code dans Wampserver.

Comme vous le supposiez certainement, la variable $a vaut 10 à chaque exécution de la fonction test.


Voici quelques exemples de déclarations de variables :

$monTexte = "Ce texte est mémorisé dans la variable \"monTexte\"";

$valeur_flottante = 12.5;

$monBooleen = true;

$monTableau = array(‘un’, ‘deux’, ‘trois’, ‘quatre’, ‘cinq’);

class maClasse{

}

$monObjet = new maClasse();

Faites une pause dans la vidéo et déclarez ces variables.

Vous allez maintenant afficher le contenu des variables avec les instructions suivantes :

echo $monTexte."<br>";

echo $valeur_flottante."<br>";

echo $monBooleen."<br>";

echo $monTableau."<br>"; //Impossible d’afficher un tableau comme ceci

echo $monObjet."<br>"; //Impossible d’afficher un objet comme ceci

Faites une pause dans la vidéo et saisissez ce code.

Vous pouvez afficher le type d’une variable avec la fonction gettype().

echo gettype($monTexte)." ";

echo gettype($valeur_flottante)." ";

echo gettype($monBooleen)." ";

echo gettype($monTableau)." ";

echo gettype($monObjet);

Faites une pause dans la vidéo, tapez ces instructions et testez le résultat.

Voici ce que vous devriez obtenir :

Voici le code complet :

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8" />

<title>Premier projet en PHP</title>

</head>

<body>

<?php

$monTexte = "Ce texte est mémorisé dans la variable \"monTexte\"";

$valeur_flottante = 12.5;

$monBooleen = true;

$monTableau = array(‘un’, ‘deux’, ‘trois’, ‘quatre’, ‘cinq’);

class maClasse{

}

$monObjet = new maClasse();

 

echo $monTexte."<br>";

echo $valeur_flottante."<br>";

echo $monBooleen."<br>";

 

echo gettype($monTexte)." ";

echo gettype($valeur_flottante)." ";

echo gettype($monBooleen)." ";

echo gettype($monTableau)." ";

echo gettype($monObjet);

?>

</body>

</html>

Remarques

  • Les noms des variables commencent toujours par le signe "$".
  • Le langage PHP est sensible à la casse des caractères. Ainsi par exemple, les variables $monBooleen et $MonBooleen sont deux entités différentes.
  • Il est tout à fait possible de stocker une valeur d’un type donné dans une variable, puis par la suite d’y stocker une valeur d’un autre type.

Dans le langage Java, une variable est “visible” dans le bloc où elle a été déclarée.

L’exemple ci-après montre qu’une même variable peut avoir plusieurs valeurs en fonction de l’endroit où elle est utilisée.

public class Test_Visibilite{
  double x = 13.35;
  public static void main (String args[]){
    double x = 1.9;

    // Ici, la variable x a pour valeur 1.9, car elle a été
    // initialisée dans la méthode main
    System.out.println("Dans main, x vaut "+x);
  }

  void Methode1()
  {
    // Ici, x a pour valeur 13.35
    System.out.println("Dans Methode1, x vaut "+x);
  }

  double Fonction1(double x)
  {
    // Ici, x a la valeur passée à la fonction
    System.out.println("Dans Methode2, x vaut "+x);
    return(x);
  }
}

Nous allons prendre un autre exemple très parlant :

public class Test{
  public static void main (String args[]){
    int i;
    for (i=0; i<10; i++)
      int j = i;
    System.out.println(j);
  }
}

Cette application, à priori correcte, produit une erreur de compilation :

Contrairement à la variable i, la variable j a été définie à l’intérieur de l’instruction for. Son étendue est donc limitée à cette instruction. Pour régler le problème, il suffit de déplacer la déclaration de la variable j en dehors de la boucle for, comme ceci :

public class Test{
  public static void main (String args[]) {
    int i;
    int j=0;
    for (i=0; i<10; i++)
      j = i;
    System.out.println(j);
  }
}