📘

Les bases du PHP

📌
Pour aller plus loin : https://www.php.net/docs.php
⚠
Pour la soutenance : fonction ≠ mĂ©thode ≠ procĂ©dure - procĂ©dure et fonction : on dit plus ça, une fonction retourne quelque chose ou pas - une fonction —> pas besoin d’instance pour l’utiliser - une mĂ©thode est Ă  l’intĂ©rieur d’une classe —> besoin d’une instance pour l’utiliser —> donc POO (si j’ai une fonction et que je la mets dans une classe, c’est une mĂ©thode)

Balises PHP


Un bloc de code PHP est toujours entourĂ© des balises <?php ... ?> ou juste <? ... ?>. S’il n’y a pas d’autres instructions aprĂšs le bloc, alors la balise de fin n’est pas obligatoire.

Pour faire de l’affichage dans le navigateur, il est possible d’utiliser la fonction echo ou les balises <?= ... ?>.

Les instructions php doivent ĂȘtre sĂ©parĂ©es par un point-virgule ; Ă  la fin.

Les commentaires sont écrits avec // ou # sur une ligne, avec /* ...*/ sur plusieurs lignes.

Les variables sont indiquées avec un dollar $.

BP : ne pas laisser de magic numbers, mieux vaut définir une constante avec un nom qui a une signification concrÚte.

Les strings sont concaténées avec un point : echo 'Hello '.$prenom;.

⚠
Attention quand on fera de l’objet, on n’utilisera pas le point mais une flùche instance=>methode().

Variables

Elles commencent toujours par un dollar $ et ne sont pas typées (inférence de type).

Il n’y a pas de typage fort : une variable peut changer de type au cours de son existence.

Le transtypage implicite est possible si le premier caractÚre correspond au type souhaité (une multiplication sur une string qui commence par un chiffre, par exemple). Le transtypage explicite est possible avec settype().

Leur portĂ©e est Ă  l’échelle du fichier : si une variable est assignĂ©e dans un bloc PHP, elle est accessible dans un autre bloc PHP plus loin.

â„č
L’interprĂ©teur PHP lit d’abord la page en entier et ensuite il remplace comme il faut.

L’assignation par valeur est faite avec le = (classique).

Il est possible d’assigner par rĂ©fĂ©rence avec & tel que la valeur de var2 est au mĂȘme endroit mĂ©moire que var1, donc toute modification s’applique aux deux variables : $var2 = &$var1;.

(+) Il est possible d’utiliser des variables dynamiques (rarement vu dans la vraie vie), avec le $$.

Les constantes n’ont pas besoin de $ et sont nommĂ©es en majuscules avec le mot-clĂ© const ou la fonction define() : define('SON_NOM', 'sa valeur dĂ©finitive');.

Il est possible de tester l’existence d’une constante avec defined().

Fonctions utiles

⚠
null ≠ vide (pas null mais rien dedans) ≠ undefined

Types

Type boolean :

- deux valeurs : true et false

- insensible Ă  la casse

- opérateurs de comparaison : classiques, avec le strictement identique ou différent (=== ou !==)

- opérateurs booléens : et (AND, &&), ou (OR, ||), ou exclusif (XOR), non (!)

â„č
OR : la premiĂšre condition est vĂ©rifiĂ©e, si elle est fausse alors la vĂ©rification s’arrĂȘte et les autres conditions ne sont pas vĂ©rifiĂ©es. XOR : soit l’un soit l’autre mais pas les deux (donc 1 1 donne 0).

- équivalent à false: 0, '', '0', [], null

Types int et float :

- nombres entiers et Ă  virgule

- opérateurs arithmétiques classiques

Type string :

- simples quotes '' : pas d’interprĂ©tation

- double quotes "" : interprétation des variables, des caractÚres de mise en forme (\n, \r, \t
)

- back slash \ : caractĂšre d’échappement (\\, \", \$...)

- point . : opérateur de concaténation

Tableaux

TrÚs souple, ils sont beaucoup utilisés en PHP.

La syntaxe des tableaux est classique : [] ou array().

Un tableau peut ĂȘtre indicĂ© (numĂ©rique) consĂ©cutif ou non, associatif (clĂ©/valeur), ou mĂȘme mixte.

On peut mettre des tableaux dans un tableau pour créer des tableaux multidimensionnels.

L’assignation successive de valeurs à un tableau remplit les cases dans l’ordre.

Il est possible d’indiquer l’indice pour modifier l’ordre.

Il est possible de préciser une clé qui sera associée à la valeur assignée.

// tableau indice
$tabI[] = 'bleu';
$tabI[] = 'rouge';
$tabI[] = 'vert';
var_dump($tabI); //array(3) { [0]=> string(4) "bleu" [1]=> string(5) "rouge" [2]=> string(4) "vert" }
// - equivaut a
$arrI = array('bleu', 'rouge', 'vert');

echo '<br><br>';

// tableau associatif
$tabA['ville'] = 'Bordeaux';
$tabA['département'] = 'Gironde';
$tabA['région'] = 'Nouvelle-Aquitaine';
var_dump($tabA);
// - equivaut a
$arrA = array('ville' => 'Bordeaux', 'département' => 'Gironde', 'région' => 'Nouvelle-Aquitaine');

echo '<br><br>';

// tableau multidimensionnel
$tabVilles = ['France' => ['Paris','Bordeaux','Marseille'], 'Espagne' => ['Madrid','Bilbao']];
var_dump($tabVilles);
// - equivaut a
$arrVilles = array('France' => array('Paris','Bordeaux','Marseille'), 'Espagne' => array('Madrid','Bilbao'));

L’accĂšs aux Ă©lĂ©ments du tableau se fait avec leur indice ou leur clĂ© entre crochets : tabMultidim['clĂ© dim1'][indice dim2].

Fonctions utiles :

- explode() = crĂ©e un tableau Ă  partir d’une string, on prĂ©cise le sĂ©parateur (utile notamment pour le JSON)

â„č
La fonction retourne un tableau donc pas besoin de mettre des crochets Ă  la suite du nom de la variable.

- implode() = l’inverse, on prĂ©cise Ă©galement le sĂ©parateur

Structures de contrĂŽle


Conditions

Les conditionnelles sont classiques : if, else, elseif d’une part, switch, case, break, default d’autre part.

if ($a === $b) {
	echo 'a est strictement égal à b';
}

switch ($repas) {
	case 1 :
		echo 'petit déjeuner';
		break;
	case 2 :
		echo 'déjeuner';
		break;
	case 3 :
		echo 'goûter';
		break;
	case 4 :
		echo 'dĂźner';
		break;
	default :
		echo 'c\'est pas l\'heure de manger';
		break;
}

Il existe une forme alternative avec if (condition) : ...instructions... endif; et switch ($var) : ...instructions... endswitch;. On peut alors mettre du html au milieu du PHP (pas recommandé).

Opérateur ternaire

Il est utilisĂ© lorsqu’on peut rĂ©pondre oui ou non Ă  la question : condition ? valeur si vraie : valeur si faux.

echo 'Il y a '.$nb.' personne'.($nb>1 ? 's' : '').' dans la piĂšce.';
// si $nb=1 : Il y a 1 personne dans la piĂšce.
// si $nb=6 : Il y a 6 personnes dans la piĂšce.

Boucles

Les boucles sont également classiques : while (condition) { instructions },

do { instructions } while (condition);,

for (initialisation, condition, incrémentation) { instructions },

foreach ($tableau as $element) { instructions },

foreach ($tableau as $cle => $valeur) { instructions }

Quelques fonctions utiles


Inclure un fichier PHP

On peut inclure un fichier avec include, souvent placĂ© au dĂ©but du fichier pour une meilleure lisibilitĂ©. Si le fichier n’est pas trouvĂ©, un warning sera renvoyĂ© mais le traitement ne sera pas arrĂȘtĂ©.

Cela ne ralentit rien car il faut attendre que tout le fichier soit chargĂ© avant qu’il y ait affichage.

On peut aussi inclure un fichier avec require, qui retournera une erreur fatale et arrĂȘtera le traitement si le fichier n’est pas trouvĂ©.

Pour Ă©viter d’appeler plusieurs fois un mĂȘme fichier dans une cascade d’inclusion, il est recommandĂ© d’utiliser include_once et require_once.

â„č
On inclue ainsi le fichier PHP dans le HTML (tout comme le CSSet le JavaScript), mais on peut aussi inclure des fichiers PHP dans d’autres fichiers PHP (pour la POO, par exemple).
BP : La séparation du code en différents fichiers (notamment selon le langage) permet à plusieurs collÚgues de travailler en parallÚle (comme designer et développer) mais aussi une plus grande maintenabilité, la réutilisation de parties de code


Changer la casse

strtoupper() en majuscules,

strtolower() en minuscules,

ucwords() pour la premiĂšre lettre de chaque mot en majuscule

Formater les nombres

sprintf() pour formater une chaßne de caractÚres (avec par exemple %02d pour un nombre sur deux caractÚres, qui ajoute un zéro devant si le nombre est sur un seul caractÚres)

number_format() pour transformer un nombre en une chaßne de caractÚres formatée, avec des paramÚtres pour le nombre de décimales, le séparateur des décimales, le séparateur des milliers.

⚠
Cette fonction ne change pas la valeur de la variable, juste l’affichage.

Rechercher dans une chaĂźne de caractĂšres

strpos() pour chercher un caractĂšre, soit elle le retourne soit elle retourne faux

strrpos() pour chercher la derniùre occurrence d’un caractùre

stripos() pour chercher un caractĂšre sans tenir compte de la casse

strripos() pour chercher la derniùre occurrence d’un caractùre, sans tenir compte de la casse

Manipuler les dates

On utilise le timestamp Unix (nombre de secondes écoulées depuis le 1er janvier 1970) pour comparer les dates.

mktime() pour calculer le nombre de secondes entre le timestamp et la date indiquée

date() pour formater la date : date('d/m/Y') pour un format jj/mm/aaaa.

ini_set() pour changer la configuration sur quelques lignes (fuseau horaire, par exemple)

â„č
Le fichier php.ini contient toute la configuration d’un projet. Il est possible de la modifier pour tout le projet dans un Ă©diteur de texte. Exemples : ;date.timezone ⇒ si je dĂ©commente, php prendra en compte la timezone de mon choix ;extension=pgsql ⇒ Ă  dĂ©commenter si on veut une db (nous on utilisera pdo_truc car php data object)

Créer et appeler une fonction

Les fonctions n’ont pas besoin d’avoir Ă©tĂ© dĂ©finies avant leur utilisation

Une fonction est créée avec function unNom(params) { instructions [return] } puis appelée avec son nom et la valeur de ses éventuels paramÚtres.

Il est possible de passer des valeurs par défaut à des paramÚtres lors de la création ($param1 = "une valeur par défault").

Il est possible de crĂ©er des fonctions anonymes, des fonctions typĂ©es (en prĂ©cisant le type de la variable retournĂ©e), d’utiliser des variables globales avec $GLOBALS.

Les expressions rationnelles

pas vues en cours, à compléter


BP en vrac