Les Variables en PHP




  1. Qu'est ce qu'une variable

En PHP comme dans tous les langages, la notion de variable est essentielle. Une variable est le nom donné à un paramètre fixé par le programmeur afin de l'utiliser à plusieurs endroits, ou dans le but de faciliter la lecture du programme.
Ainsi, l'exemple simple suivant
<?php
  echo "hello world !";
?>
Peut s'écrire
<?php
  $mavariable = "hello world !";
  echo $mavariable;
?>
$mavariable est une variable simple de nom "mavariable". On peut donner le nom qu'on souhaite à une variable, tant qu'on utilise les caractères alphanumériques (a-z, A-Z, 0-9, _, -) et qu'elle commence par le caractère "$".
Pour donner une valeur à une variable, il suffit d'utiliser le "=" qui correspond à une affectation, c'est à dire qu'on dit à PHP que $mavariable prend pour valeur "hello world !". La valeur de $mavariable ne changera pas dans la page, à moins qu'on le fasse nous-mêmes.
Tous les autres caractères ne sont pas forcément interdits, mais fortement déconseillés...

Dans cet exemple, l'utilisation d'une variable n'est pas forcement très utile. On va donc faire un autre exemple.

Si vous voulez afficher le résultat de toutes les opérations numériques de 2 nombres, on peut écrire :
<?php
  echo "3*5=".(3*5)."<br>3/5=".(3/5)."<br>3+5=".(3+5)."<br>3-5=".(3-5); ?>
ou :
<?php
  $v1 = 3;
  $v2 = 5;
  echo "$v1*$v2=".($v1*$v2)."<br>$v1/$v2=".($v1/$v2)."<br>$v1+$v2=".($v1+$v2)."<br>$v1-$v2=".($v1-$v2);
?>

Vous vous dites sûrement que la seconde est plus compliquée... Maintenant, dites vous que vous voulez changer 3 et mettre 4 à la place ! Le second cas est donc nettement plus simple à maintenir et à changer...



  2. Les variables simples



  2. 1. Types de variables

Voici différents types de variables simples :
  • $nombre = 5;
  • $nombre = "5";
  • $mot = "mot";
  • $phrase = "c'est une phrase";
  • $autrephrase = 'une autre phrase';
Toutes ces variables sont traitées de la même façon. Mais il est nécessaire de comprendre la notion de valeur numérique (entier, décimal...), de chaînes de caractères, de booléens. En effet, on a : 5<10, mais "5">"10", car si on réfléchit du point de vue numérique, 5 est effectivement inférieur à 10, mais en lettre, on compare d'abord 5 à 1, donc comme 5 est supérieur à 1, "5" est supérieur à "10".

Même si cette notion est aujourd'hui assez sensible à comprendre pour les débutants, elle est très importante, mais elle rentrera à force de s'en servir.



  2. 2. Opérations sur les variables



  2.2.1. Opérations classiques

  • Addition : "+"
  • Soustraction : "-"
  • Multiplication : "*"
  • Division rationnelle : "/"
  • Reste de la division euclidienne : "%"
  • Concaténation : "."
  • Factorisation : "(" et ")"
    Pour affecter un résultat à une variable, il suffit d'appliquer le même principe que pour lui fixer un valeur :
    <?php
      $v1 = 5;
      $v2 = 3;
      $v30 = $v1*$v2;
      $v31 = $v30/$v2;
      $v32 = $v1+$v2;
      $v33 = $v1-$v2;
      $v34 = $v1%$v2;

      echo "$v30 = $v1*$v2;<br>$v31 = $v30/$v2;<br>$v32 = $v1+$v2;<br>
      $v33 = $v1-$v2;<br>$v34 = $v1%$v2;<br>";

      $v4 = "première partie de la phrase";
      $v5 = " deuxième partie de la phrase";
      $v6 = $v4.$v5;

      echo "$v6 = <br>$v4.$v5";
    ?>
    Donne comme résultat :
    15 = 5*3;
    5 = 15/3;
    8 = 5+3;
    2 = 5-3;
    2 = 5%3;
    première partie de la phrase deuxième partie de la phrase =
    première partie de la phrase. deuxième partie de la phrase



      2.2.2. Détails sur les opérations

    <?php
      $v1 = 5;
      $v2 = 3;
      $v3 = "4";
      $v4 = "première partie de la phrase";
      $v5 = ' deuxième partie de la phrase';

      $result1 = $v1*$v2;
      $result2 = $v1+$v3;
      $result3 = $v1.$v3;
      $result4 = $v1.$v2;
      $result5 = $v4.$v5;
      $result6 = $v4+$v5;
      $result7 = $v3.$v5;
      $result8 = $v3+$v5;
      $result9 = $v2.$v5;
      $result10 = $v2+$v5;

      echo "$v1*$v2 = $result1<br>\n";
      echo "$v1+$v3 = $result2<br>\n";
      echo "$v1.$v3 = $result3<br>\n";
      echo "$v1.$v2 = $result4<br>\n";
      echo "$v4.$v5 =<br> $result5<br>\n";
      echo "$v4+$v5 = $result6<br>\n";
      echo "$v3.$v5 = $result7<br>\n";
      echo "$v3+$v5 = $result8<br>\n";
      echo "$v2.$v5 = $result9<br>\n";
      echo "$v2+$v5 = $result10<br>\n";
    ?>
    Affiche :

    5*3 = 15
    5+4 = 9
    5.4 = 54
    5.3 = 53
    premiere partie de la phrase. deuxieme partie de la phrase =
    premiere partie de la phrase deuxieme partie de la phrase
    premiere partie de la phrase+ deuxieme partie de la phrase = 0
    4. deuxieme partie de la phrase = 4 deuxieme partie de la phrase
    4+ deuxieme partie de la phrase = 4
    3. deuxieme partie de la phrase = 3 deuxieme partie de la phrase
    3+ deuxieme partie de la phrase = 3
    On voit alors que les opérations classiques pour les nombres sont applicables, qu'ils aient été saisis en tant que valeur numérique (cas de $v1) ou en tant que chaîne de caractères (cas de $v3). On voit également que si on utilise l'opérateur ".", le résultat est toujours la concaténation des variables !

    La valeur des variables est donc prise en compte en fonction de l'opérateur et non pas de comment elle a été enregistrée.




      2.2.3. Opérations sur les chaines de caractères

    Les chaines de caractères disposent d'un grand nombre de fonction qui leur sont spécifiques. Les plus pratiques ou les plus utiles (selon moi) sont présentées ci-dessous, dans ce tableau récapitulatif.
    Commande Description
    Exemple
    strpos Recherche d'une chaine de caractère dans une sous-chaine. Renvoit la position dans la chaine de la sous-chaine. Renvoit -1 si la chaine n'est pas trouvée
    strpos($machaineComplete,$maSousChaine)
    strpos('bonjour','jour') -> renvoit 3
    substr Récupère une sous-chaine dans une variable
    substr('bonjour',3,4) -> jour
    (retourne à partir du 3eme caractère, sur 4 caractères)
    substr('bonjour',strpos('bonjour','jour'),4) -> jour
    (retourne à partir de la position de 'jour' sur 4 caractères)
    substr('bonjour',3) -> jour
    (retourne la chaine sans les 3 premiers caractères)
    substr('bonjour',-5) -> njour
    (retourne les 5 derniers caractères de la chaine)
    substr('bonjour',0,3) -> bon
    (retourne les 3 premiers caractères)
    substr('bonjour',0,-5) -> bo
    (retourne la chaine sans les 5 derniers caractères)
    ereg urlencode urldecode split


      2. 3. les variables booléennes

    Une variable booléenne peut prendre seulement 2 valeurs : "true" ou "false" ("vrai" ou "faux").
    Cette variable n'a pas encore d'intérêt, mais elle en prendra plus tard (lorsqu'on étudiera les instructions spécifiques du PHP).
  • $varbool = true;
  • $varbool = false;

    Attention, il ne faut pas mettre les guillemets, ce n'est pas une chaîne de caractères, mais une valeur spécifique.

    On verra plus tard qu'une variable booléenne peut contenir le résultat d'une expression logique, c'est à dire de toutes opérations ayant un résultat logique.



      2. 4. Exercice

    Reprenez le fichier "exemple.php" et remplacez dedans les valeurs numériques par des variables contenant la même valeur.
    - une variable "$ligne" qui contient le texte, - une variable $v1 qui contient 10, - une variable $v2 qui contient 5, - une variable $v3 qui contient 52, - une variable $v4 qui contient 3 - faire les opérations sur les variables et pas sur les valeurs directement

    Solution


      3. Les variables tableaux



      3. 1. Présentation des tableaux

    Un tableau est l'équivalent de plusieurs variables regroupées en une seule.
    Par exemple, vous avez besoin d'une variable $coeff1 qui contiennent plusieurs valeurs numérique, ou d'un tableau $coeff2 contenant plusieurs mots.
    Nous allons voir comment utiliser les tableaux.

    Pour "les tableaux associatifs", allez à la partie suivante sur les "variables structurées".


      3.1.1. Initialisation

    Première méthode :
    <?php
      $coeff1[0] = 3;
      $coeff1[1] = 8;
      $coeff1[2] = 17;

      $coeff2[0] = "bonjour";
      $coeff2[1] = "bonsoir";
      $coeff2[2] = "salut";
    ?>

    Cette méthode permet de fixer une valeur directement à une case du tableau. Pour accéder à une case, il suffit de mettre le nom de la variable suivie du numéro de la case entre crochet. Dans notre exemple, pour accéder à la 2ème case du tableau, on utilise : $coeff1[1]. Il est très important de noter que la première valeur est celle de la case "0" et pas celle de la case "1". Deuxième méthode :
    <?php
      $coeff1 = array (3,8,17);

      $coeff2 = array ("bonjour","bonsoir","salut");
    ?>

    Le terme "array" signifie "tableau" en anglais. Il permet de spécifier à PHP que la valeur qu'on initialise est un tableau. Ensuite, les différentes valeurs sont situées entre les parenthèses et séparées par des virgules.

    La première case des tableaux est toujours "0".




      3.1.2. Accès aux informations

    Le code suivant :
    <?php
      $coeff1 = array (3,8,17);
      $coeff2 = array ("bonjour","bonsoir","salut");

      echo "coeff1 case 0 : ".$coeff1[0]."<br>";
      echo "coeff1 case 1 : ".$coeff1[1]."<br>";
      echo "coeff1 case 2 : ".$coeff1[2]."<br>";
      echo "coeff1 case 3 : ".$coeff1[3]."<br>";

      echo "coeff2 case 0 : ".$coeff2[0]."<br>";
      echo "coeff2 case 1 : ".$coeff2[1]."<br>";
      echo "coeff2 case 2 : ".$coeff2[2]."<br>";
    ?>
    à pour résultat :
    coeff1 case 0 : 3
    coeff1 case 1 : 8
    coeff1 case 2 : 17
    coeff1 case 3 :
    coeff2 case 0 : bonjour
    coeff2 case 1 : bonsoir
    coeff2 case 2 : salut

    On peut constater que la case 3 du tableau $coeff1 ne contient aucune valeur... Ce qui est normal.



      3. 2. Fonctions spécifiques aux tableaux



      3.2.1. count

    La fonction "count" permet de récupérer le nombre de cases dans un tableau
    Par exemple, le code suivant :
    <?php
      $coeff2 = array ("bonjour","bonsoir","salut");
      $taille = count($coeff2);

      echo "le tableau \$coeff2 contient $taille éléments<br>";
      echo "coeff2 case 0 : ".$coeff2[0]."<br>";
      echo "coeff2 case 1 : ".$coeff2[1]."<br>";
      echo "coeff2 case 2 : ".$coeff2[2]."<br>";
    ?>
    à pour résultat :
    le tableau $coeff2 contient 3 éléments
    coeff2 case 0 : bonjour
    coeff2 case 1 : bonsoir
    coeff2 case 2 : salut
    La fonction "count" n'a besoin en paramètre que du nom du tableau qui nous intéresse.
    Une fonction est une sorte d'opérateur particulier à qui on donne les opérandes que l'on souhaite. Ici, l'opérande est le tableau $coeff2 et l'opérateur est "count".

    Le "\" devant le nom de la variable permet d'afficher non pas sa valeur
    mais bel et bien son nom.




      4. Les variables structurées



      4. 1. Généralité

    Il existe plusieurs type de variables structurées :
    • tableau associatif : tableaux indicés par des chaines de caractères et pas par des nombres
    • objet : également appelé record. C'est une variable qui permet de regrouper d'autres variables de types différents, et également des fonctions et procédures


      4. 2. Tableau associatif



      4.2.1. Initialisation

    // tableau à une dimension
    $tableauassoc = array ("champs1" => "laurent", 
    "champs2" => 27, 
    "champs3" => "rennes");

    // tableau à plusieurs dimensions
    $tableauassoc = array ("champs1" => array("antoine","isabelle","laurent","charlotte"),
    "champs2" => array(33,32,28,23));



      4.2.2. Affichage

    // tableau à une dimension
    $tableauassoc = array ("champs1" => "laurent", 
    "champs2" => 27, 
    "champs3" => "rennes");
    // affichage
    echo "prénom".$tableauassoc["champs1"]."<br>\n";
    echo "age : ".$tableauassoc["champs2"]."<br>\n";
    echo "ville: ".$tableauassoc["champs3"]."<br>\n";
    // ou
    echo "prénom :{$tableauassoc["champs1"]}<br>\n";
    echo "age : {$tableauassoc["champs2"]}<br>\n";
    echo "ville: {$tableauassoc["champs3"]}<br>\n";

    // tableau à plusieurs dimensions
    $tableauassoc = array ("champs1" => array("antoine","isabelle","laurent","charlotte"),
    "champs2" => array(33,32,28,23));
    // affichage
    for ($i = 0; $i < 4; $i++) {
      echo "prénom : ".$tableauassoc["champs1"][$i];
      echo "age : ".$tableauassoc["champs2"][$i]."<br>\n";
    }
    // ou
    for ($i = 0; $i < 4; $i++) {
      echo "prénom : {$tableauassoc["champs1"][$i]}";
      echo "age : {$tableauassoc["champs2"][$i]}<br>\n";
    }



      4. 3. Objet



      4.3.1. Exemple

    <?php
    class annuaire {
      var $nom = "";
      
      function setnom($newname) {
        $this->nom = $newname;
      }
      
      function printnom() {
        echo $this->nom;
      }
    }

    $contact = new annuaire();
    $contact->setnom("hobbes");
    $contact->printnom();
    ?>


      4.3.2. Explication

    Le mot "class" permet de définir une class PHP et donc un Objet. Ensuite, il suffit de définir les variables utiles (avec l'item "var"). Ensuite, on peut définir autant de fonction que nécessaire. Ici, 2 fonctions :
    • setnom qui permet de fixer le paramètre "nom"
    • printnom qui affiche la valeur du champs "nom"
    On constate que l'accès au champs "nom" se fait en utilisant le "$this". Attention à l'utilisation qui DOIT se faire ainsi.

    Dans le code, on retrouve les 3 étapes :
    • new qui alloue la mémoire et créé le nouvel objet de type "annuaire"
    • $contact->setnom(...) qui fait appel à la méthode "setnom" afin de fixer la valeur de "nom"
    • $contact->printnom() qui utilise la méthode "printnom"
    On constate que pour utilisé une méthode ou un champs de l'objet, il faut faire suivre le nom de l'objet ($contact) par un "->" suivi du nom de la méthode ou du champs.




    Page modifiée le : 13/05/2004
    Site modifié le : 16/05/2016


    Valid XHTML 1.0 Transitional

  •