Mini-cours de PHP - MySQL

Partie II

Avant d'aller plus loin, votre serveur Apache doit être opérationnel.

Aujourd'hui, jour J.

Tous les langages informatiques ne sont pas des langages de programmation. Le HTML et CSS sont de langages descriptifs.

Rappel : Tous les langages de programmation ont 4 points communs :

Langages de programmation : le C (le "père" de (quasi) tous les langages), le C++, Java, JavaScript, PHP, ...

  1. Les variables (et la super variable : tableau)
  2. Les conditions (if ... else)
  3. Les boucles (for, while)
  4. Les fonctions (function, return)

Et quelques instructions communes : break, continue, ...

Comme vous connaissez déjà ces notions. L'étude du PHP va donc aller très vite !

Les mot-clés, le nom des classes, fonctions, et fonctions créées par le développeur sont sensibles aux majuscules/minuscules. echo = eCHo = ... Cependant, les noms de variables sont case-sensitive

Les commentaires

Dans tous les langages de programme, il est possible de placer des commentaires

// Commentaire sur une ligne (comme en C, C++)

# Commentaire sur une ligne (propre au PHP) single-line comment

/*
Commentaire sur
plusieurs lignes
(comme en C, C++)
*/
        

Les variables

Tous les langages de programmation utilisent des variables. Après avoir étudié JavaScript, vous savez ce qu'est une variable.

En PHP, pour créer une variable,

Le nom d'une variable est sensitive-case. $age =! $aGE

Plus d'info
Une lettre = a-z, A-Z et les octets de 127 à 255 (0x7f-0xff)
La plupart des éditeurs de code PHP ne colorient pas les noms de variables lorsqu'elles contiennent des caractères accentués.

Il n'est pas recommandé d'utiliser dans le nom des lettres accentuées, ni d'utiliser des mot-clés (if, for, ...) comme nom de variables. Il est recommandé que la première lettre soit une minuscule. $this est le seul nom de variable interdit.

En PHP, les types de variables sont les mêmes qu'en JavaScript (sauf "undefined" et "NaN" qui sont propres à JavaScript). Une variable peut donc contenir un nombre (avec ou sans décimale), un caractère, une chaîne de caractères, un booléen. Comme en JavaScript (en C, C++, ...), le séparateur décimal est le point, ., et le signe d'échappement est : \

Comme dans tous les langages de programmation, il est recommandé de les initialiser dès la déclaration. Exemple : $nom="BACH";

Comme en JavaScript, en PHP, une variable peut changer de type. Être initialisée avec un nombre, puis recevoir une chaîne de caractères. Mais, ce n'est pas recommandé.

En PHP, une variable peut être de type NULL (l'équivalent de "undefined" en JavaScript).
Exemple : $x = NULL; (ou $x = null;)

Particularité en PHP. Le nom d'une variable peut être une variable.
Exemple : $nom="maVariable"; $$nom="valeur"; echo $maVariable; // affichera "valeur"
Cette façon de coder n'est pas recommandée.

Déclaration

Une variable commence son existence à partir de sa première affectation.

$a = 0; $b = 0; $c = 0;

Toutefois, si la valeur initiale est la même, il est possible d'affecter plusieurs variables, en une seule instruction.

$a = $b = $c = 0;

Type de variables

En PHP, une variable n'est pas "fortement" typée, contrairement en C => $a=8;$a="xxx";echo $a; qui affichera au final : xxx

Une variable est fortement typée lorsqu'elle ne peut plus changer de type une fois déclarée. En C, les variables sont fortement typées.

Bien qu'en PHP, une variable peut changer de type. Il existe 8 types.

Portée

La variable a une portée :

Les constantes : define()

Une constante est une variable qui ne varie pas !

Par tradition, pour tous les langages, le nom d'une constante est écrit en majuscule.

define(nom, valeur [, case-insensitive]);

Paramètres :

Particularité. En PHP, une constante est, ipso facto, connue dans toute fonction même si elle a été déclarée hors d'une fonction.

Logiquement, les constantes sont déclarées au début du script (comme en C)

define("HELLO", "Bonjour !");
echo "HELLO <br>"; /* affiche : HELLO */
echo HELLO."<br>"; /* affiche : Bonjour ! */

/*pi = π = 3,1415926535897932384626433832 */
define("PI", 3.1415926535);
echo "Surface d'un cercle d'un rayon de 2 m = ".(4*PI)." m²<br>";
/* affiche : Surface d'un cercle d'un rayon de 2 m = 12.566370614 m² */

define("TVA",21);
echo "Montant de 97.99 € HTVA = ".( round(97.99*(100+TVA)) /100 )." € TVAc<br>";
/* affiche : Montant de 97.99 € HTVA = 118.57 € TVAc */

define("CARS", [
    "Alfa Romeo",
    "BMW",
    "Toyota"
]);
echo CARS[1]; /* affiche : BMW */

En JS, le mot-clé const est utilisé (à la place de var)

La string

Ce type de variable est si important que nous aborderons ici quelques fonctions. Le nom de ces fonctions sont généralement préfixée par str.

strlen()

strlen() est une fonction qui retourne un nombre entier représentant le nombre de caractères contenus dans la string passée en paramètre.

En JS, nb_carac=chaine.length;

strrev()

strrev() est une fonction qui retourne les caractères de la string passée en paramètre dans l'ordre inverse.

strpos()

strpos() est une fonction qui retourne, dans la string passée en premier paramètre, le nombre de caractères précédant la première string passée en second paramètre; ou false.

La position du premier caractère dans une string = 0 (et non 1)

Avertissement. Cette fonction peut retourner false, mais elle peut aussi retourner une valeur équivalent à false. Utilisez l'opérateur === pour tester la valeur de retour exacte de cette fonction.

$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

/* Notez notre utilisation de ===.  == ne fonctionnerait pas comme attendu
 car la position de 'a' est la 0-ième (premier) caractère. */
if ($pos === false) {
    echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'";
} else {
    echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring'";
    echo " et débute à la position $pos";
}

Plus d'info

str_replace()

str_replace() est une fonction qui remplace toutes les occurrences de la string passée en premier paramètre par la string passée en second paramètre dans la string passée en troisième paramètre.

echo str_replace("world", "Dolly", "Hello world!"); // affiche : Hello Dolly!

Plus d'info

mb_strtoupper()

mb_strtoupper() est une fonction qui remplace toutes les lettres (y compris les caractères accentués et ligatures), passées en paramètre, par leur majuscule.

echo mb_strtoupper("Thibaut àâçéèêëîïôùûüÿæœ"); // affiche : THIBAUT ÀÂÇÉÈÊËÎÏÔÙÛÜŸÆŒ

Plus d'info

strtoupper() est une fonction qui remplace que les lettres (a-z), passées en paramètre, par leur majuscule.

echo strtoupper("Thibaut"); // affiche : THIBAUT

Plus d'info

Les opérateurs

En PHP, les opérateurs sont regroupés en :

La concaténation

L'opérateur . sert à la concaténation de deux expressions.

Différence. En JavaScript, l'opérateur + sert à la concaténation.

Exemples :

$resultat = "Bonjour," . " tout le monde";
$prenom = "Jean"; $resultat = "Bonjour, " . $prenom;
$prenom = "Albert"; $nom="EINSTEIN"; $nomComplet = $prenom . " " . $nom;

L'opérateur . et le point décimal . ne seront pas confondus (par l'interprétateur), car lorsqu'il s'agit de l'opérateur, il est suivi et/ou précédé, hormis espace ( , soit du caractère : guillemet ("), ou dollar ($); tandis que s'il s'agit d'un point décimal, il est précédé et/ou suivi que d'un chiffre.

echo()

La fonction echo() sert à afficher une chaîne de caractères.

Souvent, cette chaîne de caractères est du code HTML.
Exemple : <?php echo("<strong>" . $resultat . "</strong>"); ?>. Ce résultat sera mis en gras dans la page web.

Particularité. Cette "fonction" est si souvent utilisée qu'elle est la seule qui ne requiert pas d'indiquer les parenthèses !
Exemples : <?php echo "<strong>" . $resultat . "</strong>"; ?>
<?php echo $resultat; ?>
<?php echo $a + $b ; ?>

Autre particularité. Avec echo(), la concaténation se fait automatiquement si la variable, ici $resultat, se trouve dans la string, ici résultat = $resultat, entourée de guillemets (mais pas si elle est entourée d'apostrophes)
Exemple :
<?php echo "résultat = $resultat"; ?> affichera, avec $resultat valant 4, : résultat = 4.
<?php echo "résultat = " . $resultat; ?> affichera, avec $resultat valant 4, : résultat = 4.
<?php echo 'résultat = $resultat'; ?> affichera : résultat = $resultat.

Autre particularité. Elle est même si souvent utilisée qu'elle peut être remplacée par le signe = si elle suit immédiatement la balise ouvrante de PHP.
Exemple : <?=$a?>. Cet exemple est extrême car <?php a été remplacé par <?, suivi (sans espace) par le raccourci exceptionnel de la fonction echo(), suivi (sans espace du nom de la variable), sans point-virgule puisque c'est la seule instruction, suivi (sans espace) de la balise de fermeture de PHP.

Plus d'info sur echo()

print = print() et se comporte comme echo. La différence entre echo et print est que print n'accepte qu'un seul paramètre et retourne toujours 1.

echo et print n'est pas vraiment une fonction. C'est techniquement une structure de langage. Cela fait que vous n'êtes pas obligé d'utiliser des parenthèses.

Les conditions

En PHP, les conditions sont comme en JavaScript. Fin du chapitre !

Cependant, notons une particularité propre à PHP. Du code HTML peut être inséré ainsi :

if.php :

...
  <p>Début de la page codée en HTML</p>
  <?php if($condition){ ?>
  <p>Milieu de la page codée en HTML</p>
  <?php } ?>
  <p>Fin de la page codée en HTML</p>
...

Le milieu de la page ne s'affichera que si $condition est true.

Comme en C, 0 vaut false.

Et, comme en PHP, une variable peut être de type NULL, on peut aussi avoir comme condition tel que :
if ( $maVariable == NULL) { ... }

Les trois opérateurs logiques - ||, &&, ! - en PHP, sont identiques à ceux utilisés en JavaScript (en C, en C++ et en Java)
Toutefois, en PHP, || peut s'écrire OR et && peut s'écrire AND.

Quant aux six opérateurs conditionnels - ==, !=, <, <=, >, >= - ils sont identiques en PHP et en JavaScript (en C, en C++ et en Java)

Autre particularité de PHP : La clause else if peut aussi être écrite elseif. Toutefois, si vous codez ou coderez dans d'autres langages mieux vaut utiliser la clause commune au plus grand nombre de langages, soit else if (utilisable en C, C++, JS, ...)

switch

switch équivaut à une série d'if.

switch (expression) {
    case label1:
        /* code exécuté si n=label1; */
        break;
    case label2:
        /* code exécuté si n=label2; */
        break;
    case label3:
        /* code exécuté si n=label3; */
        break;
    ...
    default:
        /* code exécuté dans les autres cas */
}

L'expression, souvent une variable, une fois évaluée doit correspondre à un nombre entier ou une string

Plus d'info.

Les boucles

En PHP, les boucles - while, do while et for - sont comme en JavaScript. Fin du chapitre !

Ces boucles - while et for - fonctionnent de la même façon en C, en C++ et en Java. Et, quelque soit le langage, il est recommandé de choisir la boucle for lorsqu'on sait, avant d'entrer dans la boucle, le nombre de tours qu'elle devra faire.

Cependant, notons une particularité propre à PHP. Du code HTML peut être inséré ainsi :

for.php :

...
  <p>Début de la page codée en HTML</p>
  <?php for($i=0; $i<10; $i++){ ?>
  <p>code HTML à répéter</p>
  <?php } ?>
  <p>Fin de la page codée en HTML</p>
...

Le code HTML sera répété, ici, 10 fois.

Les tableaux

En PHP, les tableaux, appelés array, sont comme en JavaScript. Fin du chapitre !

Petit rappel. Un tableau est une super-variable. Une variable qui contient des variables (de même type *). Chaque variable "simple" est identifiée par un index qui commence à zéro. Cet index est mis entre crochets. Cet index peut être le nom d'une variable (souvent $i). Chaque variable simple peut être un tableau. Tout cela vous le saviez déjà.

*) En PHP, une variable n'est pas typée, il est possible qu'un tableau contienne des données de tout type. Mais, ... coder ainsi est-il justifié ?

Attention. En PHP, la déclaration d'un tableau passe par une fonction, array() :
$prenoms = array("François", "Michel", "Nicole");

En JavaScript : var prenoms=["François", "Michel", "Nicole"];

Cependant, l'utilisation est identique, donc avec des crochets.

Ajout d'un élément (en fin de tableau) :

$prenoms[] = "toto";

count()

En PHP, la fonction count() retourne le nombre d'éléments dans un tableau (passé comme paramètre).

$nb = count($tableau);

En JavaScript, la taille du tableau est donnée par la propriété .length
for(var i=0; i<prenoms.length; i++) { document.write(prenoms[i]); }

for ($i=0; i$<count($prenoms); $i++) { echo $prenoms[$i]; }

Attention. L'utilisation d'un index n'existant pas provoque une erreur (Undefined offset).

La fonction array_search() retourne la clé de la valeur cherchée (premier paramètre de la fonction) dans le tableau (second paramètre de la fonction), ou false si cette valeur n'existe pas dans le tableau.

Dans une condition, il faut utiliser l'opérateur === pour distinguer 0 (la valeur est le premier élément du tableau) de false (la valeur n'existe pas dans le tableau).

$position = array_search("Michel", $prenoms);

L'équivalent en JavaScript est la méthode .indexOf(). Cette méthode s'applique aux tableaux.
var position = prenoms.indexOf("Michel");

array_search()

Voir aussi :

foreach

La boucle foreach n'a pas été abordée lors de l'étude du mini-cours de JavaScript.

foreach est un mot clé permettant de faire, plus facilement, une boucle dans un tableau. En effet, ce type de boucle, conçue pour parcourir les tableaux, ne requiert plus de connaître préalablement le nombre d'éléments dans le tableau.

foreach(...) n'est pas une fonction car ce qui entre les parenthèses ne sont pas des paramètres. foreach(...){...} est une structure de contrôle, comme for(...){...}, while(...){...}

  $prenoms = array("François", "Michel", "Nicole");

  foreach($prenoms as $prenom){
    if ($prenom=="Michel") {
      echo "Bonjour, $prenom"; break;
    }
  }

foreach($tableau as $element){...}

prenoms.php

L'instruction break; permet de quitter une boucle prématurément, comme en JavaScript.

  $prenoms = array(...);

  foreach($tableau as $value){
    ...
  }

  foreach($tableau as $key => $value){
    ...
  }

$prenom est une variable représentant un élément du tableau.
Il est de coutume de mettre un (s) à la fin du nom d'un tableau et de donner comme nom de l'élément celui du tableau sans ce (s).

foreach.

Si vous souhaitez parfaire votre connaissance en JavaScript, sachez qu'il existe une méthode .foreach() et une bouche for/in.

6 fonctions PHP pour trier les tableaux :

"r" signifie "reverse" (inverse, en français)
"k" signifie "key" (clé, en français; donc pour tableau associatif)
"a" signifie "associative" ([pour tableau] associatif, en français)

Enfin, sachez aussi que la valeur d'un tableau peut être un tableau ...

Les fonctions

En PHP, les fonctions sont comme en JavaScript. Fin du chapitre !

Depuis PHP 5.3, toute fonction native de PHP (built-in) retourne NULL0 si l'erreur provient des paramètres.

function myFunction($param1,$param2 = 50,...) {
  /* code */
"; }

Les paramètres facultatifs ne peuvent pas être suivi d'un paramètre qui n'est pas facultatifs. Ainsi, tous les paramètres facultatifs sont les derniers. La valeur par défaut est alors indiquée après le signe =.

Depuis PHP 7, il est possible d'être plus strict au niveau du type des paramètres.

declare(strict_types=1); // au début du code PHP

function myFunction(int $param1, string $param2,...) {
  /* code */
}

Et/ou au niveau du type de retour

declare(strict_types=1); // au début du code PHP

function myFunction() : float {
  /* conversion de type pas obligatoire, mais est fortement recommandée */
  return (float)($a + $b);
}

Une fonction ne retourne rien ou une seule variable. Mais, n'oubliez pas que cette variable peut être une super-variable (un tableau).

NB : Un paramètre peut aussi être une super-variable.

Un nom de fonction ne peut pas commencer par un chiffre (comme en C, JavaScript, ...).
Mais, en PHP, le nom d'une fonction est insensitve case.

JavaScript est côté client (navigateur) et donc se doit d'être léger. Le PHP est côté serveur et donc peut être plus lourd (contenir plus de fonctions natives (ou pré-définies) et de méthodes toutes faites).
JavaScript 6.0 : 13 fonctions natives + beaucoup de méthodes. Voir liste des méthodes
PHP 7.0 : + de 1.000 fonctions ! Voir Liste des fonctions et méthodes

Les variables super-globales

Particularité du PHP. Introduites depuis le PHP 4.1, elles sont tableaux associatifs disponibles partout dans le script (y compris à l'intérieur de fonctions).

Seules les plus courantes seront abordées dans ce mini-cours.

$GLOBALS est la seule super-globable à ne pas contenir l' underscore (_) dans son nom.


Voilà, vous connaissez déjà les bases du PHP.

La force de PHP est qu'il est sur un serveur et qu'il dispose d'un nombre impressionnant de fonctions très utiles.

Inutile de toutes les étudier ! Sachez simplement que si vous souhaitez faire quelque chose avec une String, un nombre, une date ou une heure, un tableau, ... il existe une fonction pour vous aider.