Cours 4 : php, le langage

La doc officielle

cartoon php6

php6, par exinside php

Les types

Voir la section correspondante
dans le manuel.

Les expressions ont un type, les variables pas toujours (« Le type d’une variable n’est pas toujours défini par le programmeur ; il peut être défini par PHP au moment de l’exécution, suivant le contexte dans lequel la variable est utilisée », nous dit le manuel).

Nombreuses conversions implicites (c’est à dire qu’on n’a pas toujours conscience que l’interpréteur change le type des expressions quand on les manipule).

Exemple avec le type booleen (True, False)

<?php

function test_bool($b)
{
  echo "$b -> ";
  if($b)
    echo 'vrai';
  else
    echo 'faux';
  echo "\n";
}

test_bool(True);
test_bool(False);
test_bool(0);
test_bool(00);
test_bool(1);
test_bool('');
test_bool('0');
test_bool('00');
test_bool('1');
test_bool('toto');
test_bool('True');
test_bool('False');

?>

Voici le résultat de l’exécution de ce script depuis une fenêtre de terminal :

[4-php] php types.php
1 -> vrai
 -> faux
0 -> faux
0 -> faux
1 -> vrai
 -> faux
0 -> faux
00 -> vrai
1 -> vrai
toto -> vrai
True -> vrai
False -> vrai

Rappel sur le fonctionnement de php

php ne connaît pas le langage html

  • Il ne fait que reproduire des chaînes de caractères
  • Il n’interprète que ce qui est signalé par des balises php
  • Ce qui est à l’intérieur de balises php doit être du php
  • Ce qui est en dehors de balises php sera recopié tel quel
  • À l’intérieur des balises, pour écrire quelque chose, il faut le dire (avec echo)

Exemple :

Bonjour, ceci est un fichier php, qui s'appelle "texte.php".

<?php

function affiche($i)
{
  echo "On m'a dit d'afficher ";
  echo "$i\n";
}

echo "<p>ceci est du html</p>\n";

affiche(3);
affiche('truc');
$bob = 4+6;
affiche($bob);

?>

Maintenant je vais calculer 2+3

<?php
 affiche(2+3);
 echo "Encore une pour la route : ";
 echo 2+3;
 echo "\n";
?>

On exécute ce script php

NB : sur les machines des salles de TP, si la commande php n’existe pas, il
faut peut-être essayer php-cli. Je vais me renseigner.

[4-php] php texte.php 

Bonjour, ceci est un fichier php, qui s'appelle "texte.php".

<p>ceci est du html</p>
On m'a dit d'afficher 3
On m'a dit d'afficher truc
On m'a dit d'afficher 10

Maintenant je vais calculer 2+3

On m'a dit d'afficher 5
Encore une pour la route : 5
[4-php]

Remarquez bien :

  • Les balises <p> sont recopiées telles quelles
  • Le 2+3 n’est pas interprété, ni les guillemets, en dehors des balises
  • Les sauts de ligne dans le code php, dans les balises php, ne sont
    pas pris en compte
  • Une commande echo ne produit pas de saut de ligne par défaut
  • Pour aller à la ligne, on utilise le caractère spécial \n(regardez bien à quels moments le texte va à la ligne)

Mais alors pourquoi utilise-t-on php avec html ?

Le processus est le suivant :

  1. Le navigateur du client demande au serveur un fichier qui a l’extension
    .php
  2. Le serveur transmet ce fichier à l’interpréteur php qui se trouve
    chez lui (chez le serveur)
  3. Une fois interprété, ce fichier produit du code html (à condition que le
    développeur lui ait fait produire du html)
  4. Le serveur envoie ce code html au navigateur du client
  5. Le navigateur affiche ce code html comme s’il avait demandé au
    serveur un fichier html

Ceci permet de générer du code html qui change en fonction des
paramètres choisis par l’utilisateur.

include

Ce qui est inclus avec include sera traité comme le fichier php
principal, et donc selon les mêmes règles que décrit plus haut :

  • Ce qui est en dehors de balises php sera recopié tel quel
  • Ce qui est à l’intérieur de balises php doit être du php
  • etc.

Ayez toujours en tête la structure du fichier html qui devra être
produit à la fin.

Exemple : Le fichier test-html.php ci-dessous.

<!DOCTYPE html>
<html>
<?php
include('head.php');
include('body.php');
?>
</html>

Le fichier head.php :

<head>
  <meta charset="utf8" />
  <title>Test</title>
</head>

Le fichier body.php :

<body>
  <h1>Voilà</h1>
  <p>Ca marche</p>

  <p>
  <?php
     echo 5*8;
     ?>
  </p>
</body>

Le résultat sur le terminal :

[4-php] php test-html.php
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf8" />
  <title>Test</title>
</head>
<body>
  <h1>Voilà</h1>
  <p>Ca marche</p>

  <p>
  40  </p>
</body>
</html>

Je mets le résultat dans un fichier :

[4-php] php test-html.php > test-html.html

Je charge ce fichier dans mon navigateur :

capture d'écran

test-html.html dans le navigateur

Comment procéder

  1. Avant tout, écrire le html que vous voulez afficher à la fin
  2. Ensuite, découper ce html pour attribuer chaque morceau à une
    partie de code php
  3. Gardez bien en tête l’ordre dans lequel doivent apparaître les
    différents morceaux dans le code html final
  4. En cas de doute, utilisez l’interpréteur du terminal pour vérifier le
    code html produit

Les tableaux

Voir la section correspondante
dans le manuel.

Contrairement à java, les tableaux en php sont des dictionnaires (ou
tableaux associatifs, ou maps en anglais), c’est à dire des listes
de couples
[ clef => valeur ]

La clef est soit une chaîne de caractère, soit un entier.

Vous avez déjà pu voir ça avec le tableau $_GET ou le tableau
$_REQUEST pour le traitement des formulaires (voir cours précédent).

Les tableaux se parcourent fréquemment au moyen de la boucle foreach :

  foreach($tab as $val)
    echo "valeur suivante : $val";

  foreach($tab as $key => $val)
    echo "à la clef $key est associée la valeur $val";

Exemple :

<?php

function affiche_tab($tab)
{
  foreach($tab as $param => $valeur)
    echo "$param donne $valeur.\n";
  echo "\n";
}

function affiche_valeurs($tab)
{
  echo "Les valeurs de mon tableau :\n";
  foreach($tab as $valeur)
    echo "$valeur.\n";
  echo "\n";
}

$cp = array(
  'nom' => 'Prieur',
  'prénom' => 'Christophe',
  'email' => 'prieur@liafa.fr');

echo "\n";
affiche_tab($cp);
affiche_valeurs($cp);
?>

Résultat :

[4-php] php array.php 

nom donne Prieur.
prénom donne Christophe.
email donne prieur@liafa.fr.

Les valeurs de mon tableau :
Prieur.
Christophe.
prieur@liafa.fr.

On peut aussi ajouter des valeurs à un tableau sans en spécifier la
clef :

$tab[] = 'toto';

Dans ce cas, la clef est fixée automatiquement à un entier, qui est le
plus petit entier qui n’a pas déjà été attribué comme clef (et 0 si
aucune valeur n’a été attribuée précédemment).

Exemple :

<?php
$tab['test'] = 6;
$tab[] = 42;
$tab[2] = 56;

echo "\n";
affiche_valeurs($tab);

for($i=0; isSet($tab[$i]); $i++)
  echo "$i donne " . $tab[$i] . "\n";

echo "\n";
?>

Résultat :

Les valeurs de mon tableau :
6.
42.
56.    

0 => 42

Remarquez bien :

  • il n’y a pas de valeur associée à la clef 1, donc la boucle s’est
    arrêtée après 0 et n’est pas allé jusqu’à 2
  • la clef 'test' n’est pas un entier mais elle définit une valeur du
    tableau, comme 0 et 2 (mais pas 1).

Récapitulatif (et plus encore)

En particulier :

Mais aussi :

  • Les structures de contrôle
  • Les opérateurs de comparaison,
    qui sont encore l’occasion de voir (comme pour les booléens au début
    de ce cours) que les types sont beaucoup plus « souples » qu’en java.

    Bien noter la distinction == vs. ===
    (et donc != vs. !==), et les tableaux
    récapitulatifs de
    comparaison entre types
    et bon courage pour les migraines :P

    Retenir surtout qu’il faut toujours faire plein de tests quand
    vous manipulez ensemble des expressions qui n’ont pas le même type.

  • Les chaînes de caractères,
    avec la distinction entre guillemets ‘simples’ et "doubles"
    (l’interpréteur évaluera les expressions qu’il trouve à l’intérieur
    des guillemets doubles, par les guillemets simples. Voir les
    guillemets utilisés dans tous les exemples ci-dessus).

Sécurisation des formulaires : éviter les injections

Voir l’exemple du piratage du site de Christine Boutin à l’annonce du retrait
de sa candidature, traité dans un autre billet.

Cette entrée a été publiée dans Cours, avec comme mot(s)-clef(s) , , , , , . Vous pouvez la mettre en favoris avec ce permalien.

2 réponses à Cours 4 : php, le langage

  1. Faute de frappe à la fin : « gruillemets » (envie de gruyère ?).

    Je ne suis pas d’accord avec « Les expressions ont un type, pas les variables ». La fonction `gettype` permet justement de récupérer le type… d’une variable (dixit la doc officielle). Ce n’est pas parce qu’il y a une conversion implicite ( »2 »+ »2 » = 4 (j’utilise des double-apostrophes pour éviter que WordPress transforme les guillemets)) qu’il n’y a pas de type.

    Autre chose, il faut rappeler qu’à la base, PHP est un langage de template (et a été fait par quelqu’un qui avouait lui même ne rien connaître à la programmation), ce qui explique cette inclusion directement dans le code HTML.

  2. Christophe dit :

    Merci pour les précisions, j’ai corrigé.
    Pour les variables, ce n’est pas si clair. Disons que certaines en ont un, mais je n’ai rien vu qui dise qu’elles ne puissent pas en changer. :P

Répondre à Baptiste Fontaine Annuler la réponse.

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Merci de répondre à cette question pour prouver que vous n'êtes pas un robot :

Combien font 2 plus 8 ?