Les bases de PHP

Premier chapitre pour appréhender notre premier langage serveur : PHP.

Auteur :
Jonathan Marco
Difficulté :
Initiation au rêve (débutant)

Pourquoi un langage serveur ?

Comme on a déjà pu l'aborder dans d'autres cours, le langage serveur permet de créer une certaine logique pour adapter et personnaliser un site internet selon l'utilisateur, et donc selon sa requête.

Par exemple, vous souhaitez que votre site n'écrive pas juste "Bonjour" mais "Bonjour Jonathan". Pour pouvoir ajouter le nom de la personne, il faut le connaître, donc l'enregistrer quelque part, en base de données par exemple. Ensuite on le récupère et on l'affiche de manière dynamique. Pour faire ça, il est nécessaire d'avoir un langage serveur qui va réaliser toutes ces actions.

Pourquoi PHP ?

PHP est un langage qui a encore une grande popularité aujourd'hui, même si des concurents sérieux existent pour des utilisations au niveau du serveur. On peut citer notamment :

  • python : qui est très apprécié dans des domaines qui nécessitent la manipulation d'une quantité importante de nombres ou de calculs, comme les statistiques, l'IA, les data science...
  • NodeJS : qui est une manière de faire du Javascript au niveau du serveur. Il est très pratique sur des sites ou des applications qui nécessitent de gérer beaucoup de requêtes concurrentes en même temps, comme les chats, les forums...

Au moment où j'écris cette article, la part de PHP dans les langages du web représente encore 80%. Cette part très importante est dû au fait que Wordpress représente une part importante des sites webs, et que Wordpress est écrit en PHP.

De plus, PHP est un langage qui est facile à apprendre et sa popularité importante fait que vous trouverez facilement d'autres développeurs pour vous aider, ainsi que de nombreux cours, tutoriels, vidéos.

Un autre gros avantage pour les débutants est qu'il est de loin le langage le plus simple à mettre en "production" sur un serveur distant, il ne nécessite que l'installation d'un serveur comme Apache et tout petit peu de configuration et le tour est joué.

Pour finir, des frameworks (boite à outil pour le développeur) importants et très utilisés tournent en PHP, comme Symfony (développé par une société française ! 🐓) ou Laravel. Ces frameworks sont bien représentés sur le marché du travail tant au niveau national qu'international.

Le serveur

Pour pouvoir travailler et utiliser PHP, il est nécessaire d'installer un serveur qui pourra traduire le PHP en HTML. Pour débuter, je vous conseille Apache qui est bien plus simple à installer, configurer, à utiliser avec PHP.

Pour les gens qui ne sont pas à l'aise avec les lignes de commande et/ou parce que vous travaillez sur Windows, vous pouvez utiliser un outil clef en main : XAMPP. Il vous installera Apache, PHP et MariaDB (base de données, je reviendrai dans le détail plus tard sur ce point).

Sinon, vous pouvez installer les versions indépendamment les unes des autres en ligne de commande (vidéo bientôt en ligne pour montrer comment faire).

Les bases de PHP

Les balises PHP

Pour écrire du PHP, il est nécessaire d'ouvrir et de fermer le PHP.

<?php
// code PHP
?>
Dans les bonnes pratiques, il est demandé de ne PAS fermer la balise PHP si vous n'avez QUE du PHP dans votre fichier (pas de HTML, JS, CSS...).

La variable

Comme dans la plupart des langages informatiques, il est possible de stocker une données pour la réutiliser plus tard dans votre code. Pour ce faire, on utilise un variable.

En PHP, la variable s'écrit comme ceci :

$maVariable = valeur;

Vous remarquerez plusieurs choses :

  • par convention, en PHP, on utilise la synthaxe dites camelCase = minuscule pour commencer, tout attaché et une majuscule pour commencer chaque nouveau mot ;
  • on termine toutes les lignes par un ; c'est obligatoire sous peine d'avoir tout qui plante ;
  • on commence la variable par un $.

En PHP, les variables peuvent prendre n'importe quel type de valeur et évoluer au fil du code.

echo

La fonction echo va transformer ce qu'elle a entre ses guillemets en du texte HTML et l'inscrire là où le code PHP se trouve, ça permet par exemple d'inscrire le nom d'une personne stockée dans une variable :

<h1>Bonjour <?php echo $name; ?></h1>

Ici dans le titre HTML <h1> PHP va écrire le nom de l'utilisateur.

Dans cet exemple :

<?php

$name = 'John Doe';

?>

<h1>Bonjour <?php echo $name; ?></h1>

... résultat :

Les nombres

$age = 18; // int
$size = 1.84; // float

On voit que les nombres s'écrivent directement sans guillements autour. Les nombres à virgule (nombre flottant) s'écrivent avec un point.

Les chaînes de caractères

$name = 'John Doe' // string

Ils peuvent s'écrire avec des guillements simples : ' ou des guillements doubles ".

La syntaxe avec des guillemets doubles permet de faire une concaténation plus rapidement comme nous le verrons plus tard.

Les booléens

$adult = true // bool
$minor = false // bool

Les booléens sont très pratiques pour les conditions qu'on voit juste après. Ils peuvent prendre deux valeurs : vrai = true et faux = false.

Les tableaux

Il existes deux types de tableaux.

Les tableaux indexés

En Javascript on appelle également ça des tableaux, en Python on utilisera plutôt le terme de "liste".

$users = ['John Doe', 'Jane Doe']; // array

$users[0]; // 'John Doe'
$users[1]; // 'Jane Doe'

$users[] = 'Jim Doe'; // Ajoute une nouvelle valeur au bout du tableau

$users[2] // 'Jim Doe'

On peut déclarer le tableau vide ou avec des déjà des valeurs. Lors qu'on souhaite ajouter une nouvelle valeur on utilise la synthaxe $array[] = valeur; qui va ajouter un nouvelle élément à la fin du tableau.

L'index des tableaux commencent toujours à 0.

Les tableaux associatifs

En Javascript on appellera ça des objets, en Python des dictionnaires.

$users = [
    'age' => 18,
    'size' => 1.84,
    'name' => 'John Doe',
]; // array

$users['age']; // 18
$users['name']; // 'John Doe'

$users['isMinor'] = false;

$users['isMinor'] // false

Le tableau associatif fonctionne de manière similaire au tableau indexé, sauf qu'on utilise ici des clés pour stocker chaque variable. On utilisera donc cette clef et on pas un index pour accéder à la valeur. Attention, les clés doivent être déclarées avec des guillemets autour.

Les objets

Ce type est plus complexe et fera l'objet d'un cours à part entière.

Les fonctions

Une autre des bases des langages informatiques est la possibilité d'enfermer une certaine logique dans une fonction. Cette fonction est alors réutilisable un peu partout dans le code.

function addition (int $nb1, int $nb2): int {
    return $nb1 + $nb2;
}

addition(14, 44) // 58

On déclare une fonction avec le mot-clé function puis on indique le nom avec lequel on va invoquer cette fonction.

Entre les parenthèses, on a les paramètres. Il peut ne pas y en avoir.

Ici je les type, c'est-à-dire que j'indique à PHP le type que j'attends pour ce paramètre => int $nb1 = j'ai un paramètre appelé $nb1 et j'attends que ce soit un int = un nombre entier. Ce n'est pas obligatoire, mais recommandé car ça permet d'avoir des erreurs qui sont remontées par le langage s'il rencontre un type inattendu, vous permettant de débuguer plus facilement. Je type également la sortie attendu de la fonction : int, si une fonction ne retourne rien on peut mettre : void. On peut passer autant de paramètres qu'on souhaite à une fonction.

Vous ne pouvez typer les paramètres que si vous êtes au moins en PHP 7.4.

Depuis la version 8.0, vous pouvez multi-typer :

function sayHello (int|string $name): string {
    return 'Hello ' . $name;
}

... vous voyez ici, le paramètre peut être un int ou un string.

Le corps de la fonction est là pour effectuer la logique inhérente à cette fonction. Le mot-clé return permet d'indiquer ce qui sera alors récupéré à l'extérieur de la fonction une fois la logique exécutée.

On ne peut rien mettre après un mot-clé return car la fonction s'arrête dès qu'elle en rencontre un.

Les conditions

Pour permettre de choisir entre plusieurs chemin, il est possible d'utiliser des conditions. Elles permettent de faire un bout de code si une condition est vrai ou un autre sinon.

if... elseif... else

$color = 'yellow';
$message = ''";

if ($color === 'red') {
    $message = "C'est une erreur !";
} elseif ($color === 'blue') {
    $message = "C'est une information";
} else {
    $message = 'Je ne connais pas cette couleur';
}

$message // Je ne connais pas cette couleur

En langage "humain" ça donnerai : Si la couleur est rouge alors le message sera "C'est une erreur", si la couleur est bleue alors le message sera "C'est une information" et sinon le message sera "Je ne connais pas cette erreur".

Attention aux "else inutiles" :

function  (string $color): string {
    if ($color === 'red') {
        return "C'est une erreur !";
    } 

    if ($color === 'blue') {
        return "C'est une information";
    }

    return $message = 'Je ne connais pas cette couleur';
}

Comme on le disait tout à l'heure, quand une fonction rencontre un mot-clé return, elle s'arrête. Si elle passe dans un des if elle s'arrêtera au return, il est donc inutile de mettre un else ou un elseif car on ne continuera pas si on passe dans un des if.

switch 

Quand on a beaucoup de elseifqui se suivent et qu'on compare toujours une égalité en fonction d'une variable, pour que ce soit moins chargé, il est possible de passer par une condition de type switch :

switch ($item) {
    case "apple":
        echo "item est une pomme";
        break;
    case "bar":
        echo "item est une barre";
        break;
    case "cake":
        echo "item est un gateau";
        break;
    default:
        echo "Je ne sais pas ce qu'est item";
        break;
}

Ici on teste la variable $item. Selon la valeur on écrira un autre message. Le mot-clé default est l'équivalent de else. Ce code serait l'équivalent de :

if ($item == "apple") {
  echo "item est une pomme";
} elseif ($item == "bar") {
  echo "item est une barre";
} elseif ($item == "cake") {
  echo "item est un gateau";
} else {
  echo "Je ne sais pas ce qu'est item";
}

Depuis la version 8.0, il est également possible d'utiliser une simplification avec la fonction match :

echo match ($item) {
  "apple" => "item est une pomme",
  "bar" => "item est une barre",
  "cake" => "item est un gateau",
  default => "Je ne sais pas ce qu'est item",
};

Ces trois écritures auront le même résultat.

À noter que si vous avez un return, les break deviennent inutiles :

switch ($item) {
    case "apple":
        return "item est une pomme";
    case "bar":
        return "item est une barre";
    case "cake":
        return "item est un gateau";
    default:
        return "Je ne sais pas ce qu'est item";
}

Les ternaires

$message = $age > 18 ? 'Je suis majeur' : 'Je suis mineur';

Les ternaires sont faites pour faire une action simple, quand une condition ne peut être que vraie ou fausse. Elle s'écrit : condition ? si c'est vrai : si c'est faux;. Quand on débute c'est le type de condition qui est le moins lisible, mais elles sont plus performantes que les conditions classique if...else, elles sont donc conseillées quand on est plus à l'aise !

Types de condition

Il existe plusieurs type de condition :

OpérateurSignification
==... égal à ...
!=... différent de ...
===... valeur et type égal à ...
!==... valeur différente ou type différent de ...
>... supérieur à ...
>=... supérieur ou égal à ...
<... inférieur à ...
<=... inférieur ou égal à ...
  • Cours
  • Tutoriels
  • Aide
  • À Propos