# Séance 2 : Eléments du langage et tests conditionnels

## Quelques bonnes pratiques

### Indentation du code&#x20;

Il est important d’indenter le code HTML mais aussi PHP pour faciliter la lecture et la recherche d’erreurs&#x20;

{% tabs %}
{% tab title="Code non indenté" %}

```php
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Ma page avec du PHP</title>
<meta charset="utf-8" />
</head>
<body>
<?php
echo '<img src="monimage.jpg" alt="image">';
?>
</body>
</html>
```

{% endtab %}

{% tab title="Code Indenté" %}

```php
<!DOCTYPE html>
<html lang="fr">
<head>
    <title>Ma page avec du PHP</title>
    <meta charset="utf-8" />
</head>
<body>
<?php
    echo '<img src="monimage.jpg" alt="image">';
?>
</body>
</html> 
```

{% endtab %}
{% endtabs %}

### Commentaires&#x20;

Les commentaires permettent de donner des informations et des explications lors de la lecture du code source PHP. Ils ne sont pas interprétés par le moteur.

Il existe des commentaires sur une seule ligne :

```php
<?php
    //j'affiche une image
    echo '<img src="monimage.jpg" alt="image">';
?>
```

Et des commentaires sur plusieurs lignes&#x20;

```php
<?php
/*
cet affichage ne fonctionne pas
echo '<img src="monimage.jpg" alt="image">';
je commente donc
*/
echo 'ici ca fonctionne';
?>
```

### Mise en page du code généré&#x20;

Si vous regardé le code généré (afficher source de la page dans votre navigateur), il est souvent difficile à lire. Il est possible de dire à PHP d’écrire ce code un peu plus "proprement". Pour sauter des lignes dans le code HTML généré, il faut utiliser le caractère spécial `\n` (newline) dans des chaînes délimitées par des guillemets.

```php
<?php
echo 'Bonjour !'."\n";
$note=11;
echo 'La note vaut : ';
echo $note."\n";
$bonus=1.5;
$note_totale=$note+$bonus;
echo 'La note finale vaut : '.$note_totale."\n";
?>
```

Le code ci-dessus donnera le résultat suivant :

![Le code HTML généré est proprement formaté](/files/-M48tHMsXaLOU1DvLSY0)

{% hint style="warning" %}
Jusqu'a présent lors des `echo` on a utilisé le caractère ' pour délimiter une chaîne. **C'est la bonne pratique et c'est ce que je vous impose sur ce module**. Mais on peut aussi utiliser des " (guillemets), notamment dans le cas particulier des caractères "\n" ou encore "\r".
{% endhint %}

## Variables

* Une variable est un emplacement mémoire possédant un nom qui sert à stocker des informations&#x20;
* Une variable possède un type&#x20;
  * Entier, réel, booléen, chaîne de caractères, ...&#x20;
  * Tableau, arbre, pile, file, date, ...

{% hint style="danger" %}
En PHP, les variables commencent **TOUJOURS** par un **$ (dollar)**
{% endhint %}

### Nommage des variables

* Le nom d’une variable commence par un caractère non numérique&#x20;
* Le nom d’une variable doit correspondre à ce qu’elle contient (pour faciliter la lecture)&#x20;
* Les caractères spéciaux sont interdits dans le nom des variables&#x20;
* Les espaces sont interdits dans le nom des variables, tout comme les "."&#x20;
* Il est recommandé d’utiliser une notation "camelCase"

{% hint style="info" %}
camelCase

La première lettre du nom d’une variable est toujours en minuscule, puis la première lettre de chaque mot composant le nom de la variable est en majuscule. Exemple : `$maVariable`, `$unLongNomDeVariable`.
{% endhint %}

### Affectations de variables

* Pour stocker quelque chose dans une variable PHP on utilise une affectation.&#x20;
* L'opérateur d'affectation est le = (égal)&#x20;

```php
<?php 
    $maVariable = 10; 
    $somme = 10 + 15; 
    $moyenne = $somme / 2; 
?>
```

### Opérations sur les variables

#### Les opérations arithmétiques classiques

```php
<?php 
$a = 1; 
$b = 3; 
$c = $a + $b; // addition 
$d = $a - $b; // soustraction 
$e = $a * $b; // multiplication 
$f = $a / $b; // division 
$g = $a % $b; // modulo (reste de la division)
?>   
```

Les opérations arithmétiques dans une forme réduite

```php
<?php 
$var = 5; 
$var++; //incrementation de 1, $var= $var + 1; 
$var--; //decrementation de 1, $var= $var - 1; 
$var += 2; //$var = $var + 2; 
$var -= 3; //$var = $var - 3; 
$var = 4; //$var = $var  4; 
$var /= 2; //$var = $var / 2; ?>

```

### Exercice

Considérons le code php suivant&#x20;

{% tabs %}
{% tab title="Ennoncé" %}
Qu'affiche le code ci-dessous ?

```php
<?php 
$monTexte = 'Bienvenue !'; // chaine 
$motDePasseUser = '123toto456'; // chaine du mot de passe 
$monNombreEntier = -10; // entier 
$monNombreReel = 3.1415; // reel 
$monBooleen = true; // booleen 
?>
```

{% endtab %}

{% tab title="Correction" %}
Rien bien sûr ! Il n'y a aucun `echo`, donc aucun affichage de la part de PHP !
{% endtab %}
{% endtabs %}

## Ruptures de séquence

* **Règle** : les programmes sont exécutés en lisant les instructions de gauche à droite et de haut en bas : **c'est la séquence d'instructions**&#x20;
* Dans certains cas, il est utile et/ou obligatoire de ne pas suivre cette règle&#x20;
* Il y a donc des instructions qui induisent une **rupture de cette séquence**
* Il y en existe trois en PHP :&#x20;
  * Les tests conditionnels (ou conditions)&#x20;
  * Les boucles&#x20;
  * Les appels de fonction

### Tests conditionnels

* Ils permettent d'effectuer des instructions si une certaine condition est remplie (est vraie) et/ou d'autres instructions lorsque la condition n'est pas remplie (est fausse)&#x20;
* Il en existe trois en php&#x20;
  * L'instruction if (si)&#x20;
  * L'instruction switch/case (sélecteur à choix multiples)&#x20;
  * Les conditions condensées (ou notation ternaire)&#x20;

#### L'instruction if&#x20;

L'instruction if permet de tester une condition et d'effectuer un bloc d'instructions si cette condition est **vraie**

```php
<?php 
$age=19; 
if ($age>=18) 
{ 
    echo 'Vous etes majeur !'; 
} 
?>
```

#### Bloc de séquence

Notez la présence des { } qui encadrent les instructions qui suivent le if (ce qui sera exécuté en cas de test vrai).

C'est ce qu'on appelle un bloc d'instruction. Toute séquence pourrait se trouver dans un bloc d'instruction.

{% hint style="danger" %}
Par contre, toute séquence qui est dans une rupture de séquence (après un test (if), une boucle, une fonction, ...) **DOIT** se trouver dans un bloc de séquence et entre { et } <br>
{% endhint %}

L'exemple ci-dessous introduit la partie else d'un test condition avec if. Ce else est le cas déclenché si la condition est fausse. Autrement dit dans l'exemple si dessous, si j'ai moins de 18.

```php
<?php 
$age=19; 
echo 'Regardons votre age :'."\n"; 
if ($age>=18) 
{ 
    echo 'Vous etes majeur !'."\n"; 
} else 
{ 
    echo 'Vous etes mineur !'."\n"; 
} 
echo 'Bienvenue en MMI !'."\n"; 
?>
```

### Conditions et opérateurs de comparaison

#### Qu'est ce qu'une condition

Une condition est une expression qui peut prendre uniquement deux valeurs **booléennes** : vrai (**true**) ou faux (**false**) .

Exemples de condition :&#x20;

* L'âge est supérieur ou égal à 18&#x20;
* La taille est inférieure à 1,80 m&#x20;
* La surface est supérieure ou égale à 100 m²&#x20;
* L'âge est égal à 18 et la ville de naissance est Troyes&#x20;

Pour toutes ces expressions, il n'y a que **deux choix possibles** : vrai ou faux, ce sont donc des conditions.

#### Opérateurs de comparaison

Pour tester les valeurs des variables, on utilise les opérateurs de comparaison suivants :&#x20;

| Nom                    | Ecriture php |
| ---------------------- | ------------ |
| Egalité                | ==           |
| Différence             | !=           |
| Supériorité stricte    | >            |
| Infériorité stricte    | <            |
| Supériorité ou égalité | >=           |
| Infériorité ou égalité | <=           |

Pour lier entre elles plusieurs conditions, on utilise les opérateur et (AND), ou (OR) et non(NOT) :

| Nom       | Ecriture PHP |
| --------- | ------------ |
| Et (and)  | &&           |
| Ou (or)   | \|\|         |
| Non (not) | !            |

```php
<?php 
if ($note>=10) { ... } 
if ($note==10) { ... } 
if ($age>=18) { ... } 
if ($age >=6 && $age <=18 && ($ville=="Troyes" || $ville=="Romilly")){ ... } 
?>
```

#### &#x20;Clause Else

L'instruction if peut aussi appeler un bloc d'instructions si la condition n'est pas vraie à l'aide de l'instruction **sinon** (else) :&#x20;

```php
<?php 
$age=19; 
if ($age>=18) 
{ 
    echo 'Vous etes majeur !' ; 
} else { 
    echo 'Vous etes mineur !' ; 
} 
?>
```

#### Clause Elseif&#x20;

On peut aussi enchaîner plusieurs conditions avec l'instruction elseif (sinon si):

```php
<?php 
if ($ville=='Troyes') 
{ 
    echo 'Vous etes troyen !'."\n"; 
} elseif ($ville=='Romilly') 
{ 
    echo 'Vous etes romillon !'."\n"; 
} elseif ($ville=='Bar sur Aube') 
{ 
    echo 'Vous etes baralbin !'."\n"; 
} else 
{ 
    echo 'Vous habitez ailleurs !'."\n"; 
} 
?
```

### Switch/Case

L'instruction switch/case permet de traiter plusieurs conditions sous une forme réduite :&#x20;

```php
<?php 
switch ($ville) { 
    case 'Troyes': 
        echo 'Vous etes troyen !'."\n"; 
    break; 
    case 'Romilly': 
        echo 'Vous etes romillon !'."\n"; 
    break; 
    case 'Bar-sur-Aube': 
        echo 'Vous etes baralbin !'."\n"; 
    break; 
    default: 
        echo 'Vous habitez ailleurs !'."\n"; 
} 
?>
```

L'instruction break permet de sortir du switch/case. Si on l'oublie, les instructions suivantes vont s'exécuter.&#x20;

Dans certains cas, il est utile de ne pas mettre de break quand plusieurs choix conduisent au même résultat :

```php
<?php 
$ville='Sens'; 
switch ($ville) { 
case 'Troyes': 
case 'Romilly': 
case 'Bar-sur-Aube': 
    echo 'Vous etes aubois !'."\n"; 
break; 
case 'Sens': 
case 'Auxerre': 
    echo 'Vous etes icaunais !'."\n"; 
break; 
default: 
    echo 'Vous habitez ailleurs !'."\n"; 
} 
?>
```

#### Notation ternaire

Il est possible de condenser l'écriture d'un test sur une seule ligne avec l'instruction **(condition)?valeursivraie:valeursifausse;**&#x20;

```php
<?php $majeur=($age>=18)?true:false; ?>
```

{% tabs %}
{% tab title="Ennoncé" %}
On doit payer 10% d'impôts si on gagne moins de 1000 € / mois et 25% d'impôts à partir de 1000 € / mois. Ecrire un programme qui détermine le montant des impôts en fonction du salaire mensuel.
{% endtab %}

{% tab title="Correction" %}

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://cours.davidannebicque.fr/m1202/seance-2-elements-du-langage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
