Académique Documents
Professionnel Documents
Culture Documents
PHP
Chapitre 4
Qu'est-ce que PHP ?
• Les fichiers PHP peuvent contenir du texte, du code HTML, CSS, JavaScript et PHP
• Le code PHP est exécuté sur le serveur et le résultat est renvoyé au navigateur sous
• Lorsque PHP traite un fichier, il cherche les balises d'ouverture et de fermeture (<?php et
?>) qui délimitent le code qu'il doit interpréter.
• De cette manière, cela permet à PHP d'être intégré dans toutes sortes de documents, car
tout ce qui se trouve en dehors des balises ouvrantes / fermantes de PHP est ignoré.
Séparation des instructions
• PHP requiert que les instructions soient terminées par un point-
virgule à la fin de chaque instruction. La balise fermante d'un bloc de
code PHP implique automatiquement un point-virgule ; vous n'avez
donc pas besoin d'utiliser un point-virgule pour terminer la dernière
ligne d'un bloc PHP. La balise fermante d'un bloc inclura
immédiatement un caractère de nouvelle ligne si un est présent.
Les types de variables
PHP supporte les types basiques.
types scalaires :
boolean
integer
float (nombre à virgule flottante,
i.e. double)
string
types composés :
array
object
iterable
Pour forcer la conversion d'une variable en un certain type, vous pouvez transtyper (cast) la
variable ou utiliser la fonction settype().
Les chaînes de caractères ¶
Une chaîne de caractères est une série de caractères, où un caractère est la même
chose qu'un octet. De ce fait, PHP ne supporte que les jeux de caractères
comportant 256 caractères différents.
Les tableaux ¶
• Un tableau en PHP est en fait une carte ordonnée qui associe des valeurs à des clés.
• Un tableau peut être créé en utilisant la structure de langage array().
Remarque: La clé key peut être soit un integer, soit une chaîne de caractères. La valeur peut être de
n'importe quel type.
Tableaux associatifs - parcours avec boucle foreach
Portée des variables
La portée d'une variable dépend du contexte dans lequel la variable est
définie. Pour la majorité des variables, la portée concerne la totalité d'un
script PHP. Mais, lorsque vous définissez une fonction, la portée d'une
variable définie dans cette fonction est locale à la fonction. Par exemple :
Le script n'affichera rien à l'écran car l'instruction echo utilise la variable locale $a, et celle-ci n'a pas été assignée
préalablement dans la fonction
Exemple avec global
L'opérateur de division ("/") retourne une valeur à virgule flottante sauf si les 2 opérandes sont des entiers
(ou une chaîne de caractères qui a été convertie en entiers) et que leur division est exacte (i.e. a pour reste
0), auquel cas une valeur entière sera retournée. Pour la division entière, voir intdiv().
Les opérateurs d'affectation
• L'opérateur d'affectation le plus simple est le signe "=".
• Il signifie que l'opérande de gauche se voit affecter la valeur
de l'expression qui est à droite du signe égal.
<?php
$a = 3;
$a += 5; // affecte la valeur 8 à la variable $a correspond à l'instruction '$a = $a + 5';
$b = "Bonjour ";
$b .= " tout le monde!"; // affecte la valeur "Bonjour tout le monde!" à
// la variable $b
// identique à $b = $b." tout le monde!";
?>
Affectation par référence
• L'affectation par référence est aussi supportée, au moyen de la syntaxe
"$var = &$othervar;". L'affectation par référence signifie que les deux
variables pointent vers le même conteneur de donnée, rien n'est copié nulle
part.
<?php
$a = 3;
$b = &$a; // $b est une référence à $a
$a = 4; // change $a
$a !== $b Différent TRUE si $a est différent de $b ou bien s'ils ne sont pas du même type.
$a < $b Plus petit que TRUE si $a est strictement plus petit que $b.
$a > $b Plus grand TRUE si $a est strictement plus grand que $b.
?>
var_dump() affiche les informations structurées d'une variable, y compris son type et sa valeur
Opérateur de fusion Null (??)
<?php
// Exemple d'utilisation pour: Opérateur de fusion Null
$action = $_POST['action'] ?? 'default';
?>
Opérateurs d'incrémentation et décrémentation
• PHP supporte les opérateurs de pre- et post-incrémentation et
décrémentation, comme en langage C.
• La décrémentation des valeurs NULL n'a également aucun effet, mais
leur incrémentation donnera comme résultat 1.
<?php
$a = "Bonjour ";
$b = $a . "Monde !"; // $b contient "B
onjour Monde !"
$a = "Bonjour ";
$a .= "Monde !"; // $a contient "Bonjo
ur Monde !"
?>
Opérateurs de types
instanceof est utilisé pour déterminer si une variable PHP est un objet instancié
d'une certaine classe :
<?php
class MaClasse
{
}
class PasMaClasse
{
}
$a = new MaClasse;
Lors de l'assignation d'une instance déjà créée d'une classe à une variable, la nouvelle variable accédera à la même
instance que l'objet qui a été assigné.
$assigned = $instance;
$reference =& $instance;
Propriétés et méthodes
• Les propriétes et méthodes de classe vivent dans des "espaces de noms" séparé,
donc il est possible d'avoir une propriété et une méthode avec le même nom
<?php
class Foo
{
public $bar = 'property';
L'exemple va afficher :
public function bar() {
return 'method'; property
} method
}
la déclaration.
• Il n'est pas possible d'étendre plusieurs classes : une classe peut uniquement hériter d'une seule classe de
base.
• Les méthodes et membres hérités peuvent être surchargés en les redéclarant avec le même nom
• Cependant, si la classe parente a défini une méthode comme final, alors celle-ci ne sera pas
surchargeable.
Héritage simple d'une classe
<?php
class SimpleClass
{
// définition de la méthode parente
function displayVar()
{
echo "une valeur par défaut";
}
}
?>
<?php
class ExtendClass extends SimpleClass
{
// Redéfinition de la méthode parente
function displayVar()
{
echo "Classe étendue\n";
parent::displayVar();
} L'exemple va afficher :
}
• Elles sont définies en utilisant un des mots-clés public, protected, ou private, suivi optionnellement d'une déclaration
• Cette déclaration peut comprendre une initialisation, mais celle-ci doit être une valeur constante, c'est à dire qu'elle
• Au sein des méthodes de classes (méthode statique), les propriétés non statiques peuvent être appelées en utilisant
• Les propriétés statiques peuvent être appelées en utilisant la syntaxe :: (deux doubles points) : self::$property.
• La pseudo-variable $this est disponible au sein de n'importe quelle méthode, lorsque cette méthode est appelée
depuis un objet.
Constantes de classe
• Il est possible de définir des valeurs constantes à l'intérieur d'une classe, qui
ne seront pas modifiables. Les constantes diffèrent des variables normales du
fait que l'on n'utilise pas le symbole $ pour les déclarer ou les utiliser. La
visibilité par défaut des constantes de classe est public.
• La valeur doit être une expression constante, pas (par exemple) une variable,
une propriété, ou un appel de fonction.
Définition et utilisation d'une constante de classe
<?php
class MyClass $class = new MyClass();
{ $class->showConstant();
const CONSTANT = 'valeur constante';
echo $class::CONSTANT."\n"; // Depuis PHP 5.3.0
function showConstant() { ?>
echo self::CONSTANT . "\n";
}
}
Constructeurs et destructeurs
Constructeur__construct ([ mixed $args = "" [, $... ]] ) : void
est dû au fait que les détails spécifiques de l'implémentation sont déjà connus en interne par ces objets.
membres static ou constant, ainsi qu'aux propriétés ou méthodes surchargées d'une classe.
abstraite doit elle-aussi être abstraite. Les méthodes définies comme abstraites déclarent simplement la signature de la
ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
Interfaces
• Les interfaces objet vous permettent de créer du code qui spécifie
quelles méthodes une classe doit implémenter, sans avoir à définir
comment ces méthodes fonctionneront.
• Les interfaces sont définies de la même façon que pour une classe, mais
en utilisant le mot-clé interface à la place de class, et sans spécifié le
contenu des méthodes.
• toutes les méthodes déclarées dans une interface doivent être
publiques.
implements
• l'opérateur implements est utilisé pour implémenter .
• Toutes les méthodes de l'interface doivent être implémentées dans une
classe ; si ce n'est pas le cas, une erreur fatale sera émise.
• Les classes peuvent implémenter plus d'une interface, en séparant chaque
interface par une virgule.
Les constantes
Les interfaces peuvent contenir des constantes.
Les constantes d'interfaces fonctionnent exactement comme les constantes
de classe, mis à part le fait qu'elles ne peuvent pas être écrasées par une
classe ou une interface qui en hérite.
Exemple #1 Exemple d'interface
// Ceci ne fonctionnera pas
<?php
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
// Declaration de l'interface 'iTemplate'
interface iTemplate class BadTemplate implements iTemplate
{ {
public function setVariable($name, $var); private $vars = array();
public function getHtml($template);
}
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
// Implémentation de l'interface
// Ceci va fonctionner }
class Template implements iTemplate ?>
{
private $vars = array();
<?php
if( $a == 1 || $a == 2 ) { <?php
if( $b == 3 || $b == 4 if( ($a==1 || $a==2) && ($b==3 || $b==4) &&
) { ($c==5 || $c==6) ) {
if( $c == 5 || //do that something here.
$ d == 6 ) { }
//Do ?>
something here.
}
}
}
L'instruction else
• Souvent, vous voulez exécuter une instruction si une condition est remplie,
et une autre instruction si cette condition n'est pas remplie.
<?php
if ($a > $b) {
echo "a est plus grand que b";
} else {
echo "a est plus petit que b";
}
?>
• elseif, comme son nom l'indique, est une combinaison de if et de else
<?php
if ($a > $b) {
echo "a est plus grand que b";
} elseif ($a == $b) {
echo "a est égal à b";
} else {
echo "a est plus petit que b";
}
?>
Note: A noter que elseif et else if sont traités de la même façon seulement quand des accolades sont utilisées,
Syntaxe alternative
• PHP propose une autre manière de rassembler des instructions à l'intérieur
d'un bloc, pour les fonctions de contrôle if, while, for, foreach et switch.
• Dans chaque cas, le principe est de remplacer l'accolade d'ouverture par
deux points (:) et l'accolade de fermeture par, respectivement, endif;,
endwhile;, endfor;, endforeach;, ou endswitch;.
<?php
if ($a == 5):
echo "a égale 5";
<?php if echo "...";
elseif ($a == 6):
($a == 5): ?> echo "a égale 6";
A égal 5 echo "!!!";
<?php endif; ?> else:
echo "a ne vaut ni 5 ni 6";
endif;
?>
L'instruction while
• La boucle while est le moyen le plus simple d'implémenter une boucle
en PHP. Cette boucle se comporte de la même manière qu'en C.
L'exemple le plus simple d'une boucle while est le suivant :
<?php
/* exemple 2 */
/* exemple 1 */
$i = 1;
$i = 1;
while ($i <= 10):
while ($i <= 10) {
echo $i;
echo $i++; /* La valeur affichée est $
$i++;
i avant l'incrémentation
endwhile;
(post-
?>
incrémentation) */
}
do-while ¶
• Les boucles do-while ressemblent beaucoup aux boucles while, mais
l'expression est testée à la fin de chaque itération plutôt qu'au début.
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
for
• Les boucles for sont les boucles les plus complexes en PHP. Elles
fonctionnent comme les boucles for du langage C(C++).
for (expr1; expr2; expr3) commandes
La première expression (expr1) est évaluée (exécutée), quoi
qu'il arrive au début de la boucle.
//commandes
}
Note:
foreach n'accepte pas l'opérateur de suppression
foreach (array_expression as $key => $value) des erreurs @.
{
//commandes
}
break
• L'instruction break permet de sortir d'une structure for, foreach, while, do-while ou
switch.
• break accepte un argument numérique optionnel qui vous indiquera combien de
structures emboîtées doivent être interrompues.
La valeur par défaut est 1, seulement la structure emboitée immédiate est interrompue.
• L'instruction continue est utilisée dans une boucle afin de sauter les
instructions de l'itération courante et de continuer l'exécution à la
condition de l'évaluation et donc, de commencer la prochaine
itération.
• Continue accepte un argument numérique optionnel qui vous
indiquera combien de structures emboîtées doivent être éludées.
• La valeur par défaut est 1, ce qui revient à aller directement à la fin de
la boucle courante.
Exemple
$i = 0;
while ($i++ < 5) {
<?php echo "Dehors<br />\n";
foreach ($arr as $key => $value) { while (1) {
if (!($key % 2)) { echo "Milieu<br />\n";
// évite les membres pairs while (1) {
continue; echo "Intérieur<br />\n";
} continue 3;
do_something_odd($value); }
} echo "Ceci n'est jamais atteint.<br />\n";
}
echo "Ceci non plus.<br />\n";
}
?>
switch
L'instruction switch équivaut à une série d'instructions if.
Les deux exemples suivants sont deux manières différentes
d'écrire la même chose, l'une en utilisant une séries de if, et Instruction switch utilisant une chaîne
l'autre en utilisant l'instruction switch : de caractères
<?php
switch ($i) {
switch ($i) { case "apple":
case 0: echo "i est une pomme";
<?php echo "i égal 0"; break;
if ($i == 0) { break; case "bar":
echo "i égal 0"; case 1: echo "i est une barre";
} elseif ($i == 1) { echo "i égal 1"; break;
echo "i égal 1"; break; case "cake":
} elseif ($i == 2) { case 2: echo "i est un gateau";
echo "i égal 2"; echo "i égal 2"; break;
} break; }
} ?>
?>
return
• return retourne le contrôle du programme au module appelant.
L'exécution reprend alors à l'instruction suivante de l'invocation du
module.
• Si appelée depuis une fonction, la commande return termine
immédiatement la fonction, et retourne l'argument qui lui est passé..
require et include
• L'instruction de langage require inclut et exécute le fichier spécifié en
argument.
• require est identique à include mis à part le fait que lorsqu'une erreur
survient, il produit également une erreur fatale de niveau
E_COMPILE_ERROR.
• require stoppera le script alors que include n'émettra qu'une alerte
de niveau E_WARNING, ce qui permet au script de continuer.
require_once
• L'instruction require_once est identique à require mis à part que PHP vérifie si le
fichier a déjà été inclus, et si c'est le cas, ne l'inclut pas une deuxième fois.
include_once
<?php
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $in
put[0]+$input[1];
}
?>
Valeur par défaut des arguments
• Vous pouvez définir comme en C++ des valeurs par défaut pour les arguments
de type scalaire :
<?php L'exemple ci-dessus va afficher :
function servir_cafe ($type = "cappuccino")
Servir un cappuccino.
{
Servir un .
return "Servir un $type.\n";
Servir un espresso.
}
echo servir_cafe();
echo servir_cafe(null);
echo servir_cafe("espresso");
?>