PHP


le langage PHP.



BoTTom



1.Introduction au langage



1.1.Syntaxe de base du langage PHP

Comme pour tous les langages de programmation, PHP obéit à certaines règles syntaxiques sous peine d'engendrer un dysfonctionnement des pages web.



1.2.Le séparateur d'instructions

Les instructions PHP doivent être terminées par un point-virgule, à l'instar du Javascript.

// instruction_PHP;

echo "Bienvenue dans le cours PHP !";

Si une instruction n'est pas terminée dans un script, alors cette erreur risque de perturber le fonctionnement correct de la page, voire de déclencher une erreur d'exception.

Si les marqueurs sont placés de part et d'autre de l'instruction, alors il est possible d'omettre le séparateur puisque la balise de fermeture marque implicitement la fin de l'instruction.

<?php echo "Instruction correcte" ?>



1.3.Les commentaires

A l'instar de la plupart des langages, PHP accepte au sein de ses lignes de codes des commentaires permettant de rendre le script facilement compréhensible.

Les commentaires peuvent être insérés dans un script selon plusieurs méthodes différentes.

// Commentaire sur une ligne

/* Commentaire sur

plusieurs lignes */

# Commentaire Unix Exemple



<?php

// Définition d'une constante
define("MESSAGE", "Attention, vous n'avez pas correctement rempli un champ !");

echo MESSAGE;  # Instruction d'affichage

/* Ces lignes de code permettent simplement d'écrire dans le document résultant le message suivant :"Attention, vous n'avez pas correctement rempli un champ !" */

?>

1.4.Insertion des scripts

Les scripts écrits en PHP doivent être intégrés dans une page HTML par le biais d'un balisage spécifique.

<? Script PHP... ?>

Dans le style des instructions de traitement XML, les scripts PHP sont encadrés par une balise d'ouverture <? et une autre de fermeture ?>. Cela n'est possible que si l'option d'exécution short_open_tag ou l'option de complation --enable-short-tags. est activée.

Il est également possible d'intégrer le mot clé php après la première balise de telle sorte à adopter le style de balisage spécifique à PHP, lequel est évidemment le plus couramment utilisé dans les applications PHP.

<?php Script PHP... ?>

Par ailleurs, l'utilisation des marqueurs HTML de scripts est permise avec l'attribut language paramétré pour le langage PHP.

<script language="PHP">

Script PHP...

</script>

Enfin, le code PHP peut être encadré par le balisage réservé à ASP, si l'option d'exécution asp_tags ou l'option de compilation --enable-asp-tags est activée.

<% Script PHP... %>



2.Les fichiers externes

Les scripts PHP peuvent être contenus dans des fichiers externes afin d'être réutilisés par plusieurs documents HTML différents.

Ainsi, un mécanisme d'inclusion permet d'insérer puis d'évaluer le contenu d'un fichier externe dans des pages HTML
(la fonction retourne 0 ou 1 selon qu'elle ait fonctionné ou pas).

<?php include("nom_fichier.inc"); ?>

Une autre instruction contribue à garantir que le fichier externe ne sera inclus et évalué qu'une seule et unique fois dans le document hôte.

<?php include_once("nom_fichier.inc"); ?>



L'instruction require réalise le même travail, mais plante le script si le fichier ne peut pas être copié

            <?php require("nom_fichier.inc"); ?>

A l'instar de l'instruction include, require possède son pendant permettant une unique substitution dans le document hôte.

<?php require_once("nom_fichier.inc"); ?>


Le fichier inclus peut porter n'importe quelle extension (souvent .inc) et contient par défaut du HTML, s'il contient du php, il doit être encadré de <?php et de ?>






3.Types de données

Il n'existe que quatre types de données dans le langage PHP.

Les variables comme dans de nombreux langages web ne possèdent pas de types de données prédéfinis. Seul le contenu de la variable en cours de traitement définira son type de données. Les variables peuvent donc changer de type à n'importe quelle étape du script.

Type

Description

entier

représente un entier positif compris entre
-2 147 483 647 et 2 147 483 647.

flottant

représente un nombre à virgule flottante compris entre
-1.78 10308 et 1.78 10308.

chaîne de
caractères

représente une chaîne de caractères.

booléen

représente une valeur booléenne possédant deux valeurs possibles, soit true ou false.





4.Variables et constantes

Les constantes sont des noms chargés de représenter des valeurs invariables et inaltérables.

NOM_CONSTANTE = valeurConventionnellement,

Les constantes sont toujours écrites en majuscules pour des raisons de clarté du code.

Les constantes acceptent uniquement des valeurs parmi les types suivants :

La création d'une constante est réalisée par l'intermédiaire de la fonction define.

define(NOM_CONSTANTE, valeur_constante);

Une constante est simplement appelée par son nom avec une casse correcte et sans le signe $ dévolu aux variables.

echo NOM_CONSTANTE;

Les constantes sont utilisables partout dans le code puisqu'elles sont par définition, globales.



4.1.Les constantes prédéfinies

Plusieurs constantes prédéfinies existent dans le langage PHP dans le but de rendre disponible certaines valeurs utiles dans une application web.



Constante

Valeur

Description

__FILE__


contient le nom du fichier en cours d'exécution.

__LINE__


contient le numéro de la ligne en cours d'exécution.

PHP_VERSION


contient la chaîne de caractères indiquant la version du PHP en cours d'utilisation.

PHP_OS


contient le nom du système d'exploitation en cours d'utilisation sur le serveur.

TRUE


représente la valeur logique TRUE (vrai).

FALSE


représente la valeur logique FALSE (faux).

E_ERROR

1

représente une erreur impossible à corriger. Elle est différente d'une erreur d'analyse.

E_WARNING

2

représente un message d'alerte provoqué par une erreur qui n'interrompt pas le script.

E_PARSE

4

représente une erreur d'analyse dans le domaine syntaxique dont la correction est impossible.

E_NOTICE

8

représente un avertissement ou une erreur n'ayant pas provoqué un arrêt du script.

E_CORE_ERROR

16

représente un avertissement ou une erreur n'ayant pas provoqué un arrêt du script.

E_CORE_WARNING

32

représente un avertissement ou une erreur n'ayant pas provoqué un arrêt du script.

E_COMPILE_ERROR

64

représente une erreur de compilation provoquant l'interruption du script.

E_COMPILE_WARNING

128

représente un message d'avertissement provenant du compilateur sans interrompre le script.

E_USER_ERROR

256

représente une erreur due à l'utilisateur provoquant l'interruption du script.

E_USER_WARNING

512

représente un message d'avertissement dû à l'utilisateur ne provoquant pas l'arrêt du script.

E_USER_NOTICE

1024

représente un message d'avertissement ou une erreur n'ayant pas provoqué l'arrêt du script dû à l'utilisateur.

E_ALL


représente toutes les constantes E_....



La fonction get_defined_constants permet de retourner la liste de toutes les constantes prédéfinies et créées par define, ainsi que leur valeur associée.

echo get_defined_constants();

// affiche la liste : constante => valeur

Variables

Les variables dans le langage PHP se distinguent par le caractère dollar ($) placé devant leur nom.

$nom_variable

Les noms de variables doivent être composés de caractères valides [a-zA-Z_] et de plus sont sensibles à la casse.

Les variables peuvent contenir n'importe quel type de donnée supporté par le langage PHP, soit :

L'assignation d'une valeur à une variable s'effectue par l'intermédiaire du signe égal (=).

En ajoutant une esperluette (&) devant la variable, il devient possible d'assigner une référence à une variable,
c'est-à-dire que la variable réceptrice en changeant de valeur affectera celle de la variable référencée,
ou, dit autrement, le même espace mémoire possède maintenant deux noms.

$variable = &$variable_réferencée;

exemple

$prenom = 'Pierre';

$prenom_temp = &$prenom;   # $prenom_temp = 'Pierre'

$prenom_temp = 'Jean' . $prenom_temp;

// $prenom_temp = $prenom = 'Jean-pierre'



4.2.La portée des variables

La portée des variables diffère selon son emplacement au sein du code PHP dans une page web.

Les variables peuvent avoir une portée globale si elles sont définies en dehors d'une fonction. Dans le cas contraire, elles seront locales.


Les fichiers inclus dans un autre peuvent non seulement, accéder aux variables globales définies dans la page hôte, mais également les modifier.



4.3.Les variables dynamiques

Les variables dynamiques permettent d'affecter un nom différent à une autre variable.

$nom_variable = 'nom_var';

$$nom_variable = valeur;

// équivaut à

$nom_var = valeur;

Cette technique facilite donc, la modification dynamique du nom d'une variable.

Les variables tableaux sont également capables de supporter les noms dynamiques ; cependant il est nécessaire de faire attention à la syntaxe à utiliser afin d'éviter toute équivoque lors d'un appel à $$variable. C'est pourquoi, l'adjonction d'accolades rend l'expression plus sûre.

$nom_variable = array("val0", "val1", ...,"valN");

${$nom_variable[0]} = valeur;

$val0 = valeur;

$nom_variable = "nom_var";

${$nom_variable}[0] = valeur;

$nom_var[0] = valeur;



Les accolades servent aussi à éviter toute confusion lors du rendu d'une variable dynamique.

echo "Nom : $nom_variable - Valeur : ${$nom_variable}";

// équivaut à

echo "Nom : $nom_variable - Valeur : $nom_var";



4.4.Le transtypage

Le transtypage permet de convertir le type d'une variable dans un autre type explicite.

$variable = (operateur_typage) valeur;



Opérateur

Description

(int)
(integer)

convertit une variable en un nombre entier.

(real)
(double)
(float)

convertit une variable en un nombre décimal.

(string)

convertit une variable en une chaîne de caractères.

(array)

convertit une variable en un tableau.

(object)

convertit une variable en un objet.



Une variable peut délivrer son type de donnée en utilisant une fonction PHP spécifique.

$chaine_type = gettype($variable);



Fonction

Description

gettype()

retourne le type d'une variable (integer, double, string, boolean, NULL, array, object, resource, user function, unknown type).

is_numeric()

indique si la variable est de type numérique.

is_int()
is_integer()
is_long()

indique si la variable est un entier.

is_double()
is_real()
is_float()

indique si la variable est un nombre décimal.

is_string()

indique si la variable est une chaîne de caractères.

is_array()

indique si la variable est un tableau.

is_object()

indique si la variable est un objet.

is_bool()

indique si la variable est booléenne.

is_null()

indique si la variable est nulle.

is_resource()

indique si la variable est une ressource.

is_scalar()

indique si la variable est scalaire, si elle contient des entiers, des nombres décimaux, des chaînes de caractères ou des booléens.



Les fonctions is_* retournent une valeur booléenne, true si la comparaison est vraie, sinon false.

true | false = is_integer($variable);



4.5.Les variables prédéfinies

De nombreuses variables prédéfinies sont disponibles à partir de la configuration courante de PHP.

Evidemment, le langage PHP pouvant fonctionner sur de multiples plateformes et serveur web, les variables peuvent fortement différer d'une installation à une autre.

C'est pourquoi, avant d'utiliser une de ces variables, il sera nécessaire de vérifier son existence à l'aide de la fonction phpinfo.

Les informations fournies par cette commande peuvent être les options de configuration principales et standards ou encore celles d'extensions comme pour MySQL, ODBC ou XML, des informations sur le serveur, mais aussi les variables d'environnement et les variables PHP prédéfinies, les en-têtes HTTP, ainsi que la licence GNU Public.

echo phpinfo(constante);

Les informations indiquées par phpinfo peuvent être sélectionnées par catégorie à l'aide de l'argument constante.



Constante

Description

INFO_ALL

affiche toutes les informations.

INFO_CONFIGURATION

affiche les informations de configuration.

INFO_CREDITS

affiche les informations sur les auteurs du module PHP.

INFO_ENVIRONMENT

affiche les variables d'environnement.

INFO_GENERAL

affiche les informations sur la version de PHP.

INFO_LICENSE

affiche la licence GNU Public

INFO_MODULES

affiche les informations sur les modules associés à PHP.

INFO_VARIABLES

affiche les variables PHP prédéfinies.



Ces variables peuvent être utilisées n'importe où dans un script PHP à condition de placer devant leur nom le fameux signe dollar ($).

echo $HTTP_USER_AGENT

echo $PHP_OS // retourne OS400 sur un I5 ou un AS/400

nom_ordinateur = $_ENV["COMPUTERNAME"]



4.6.Les fonctions de variables

Le langage PHP dispose de nombreuses fonctions permettant de travailler sur les variables.



5.Les Opérateurs

Les expressions permettent d'évaluer, par l'intermédiaire d'opérateurs spécifiques, différentes valeurs numériques littérales.

Le langage PHP possède un jeu complet d'opérateurs permettant de multiples combinaisons d'expressions.



5.1.Les Opérateurs d'affectation

Un opérateur d'affectation assigne la valeur de l'opérande gauche basée sur la valeur de l'opérande droite.

L'opérateur d'affectation de base est le signe d'égalité (=), qui assigne la valeur de son opérande droite à son opérande gauche. C'est-à-dire, droite = gauche assigne la valeur de gauche à droite.

Les autres opérateurs d'affectation sont sténographiés pour des exécutions standard, comme montré dans la table suivante.



Opérateur

Equivalent
Description

$x = $y


$y est affecté à $x

$x += $y

$x = $x + $y

$y est additionné à $x

$x -= $y

$x = $x - $y

$y est soustrait de $x

$x *= $y

$x = $x * $y

$x est multiplié par $y

$x /= $y

$x = $x / $y

$x est divisé par $y

$x %= $y

$x = $x % $y

le reste de $x/$y est affecté à $x



5.2.Les Opérateurs d'incrémentation et de décrémentation

Les opérateurs d'incrémentation et de décrémentation permettent respectivement d'augmenter de un la variable concernée.



Opérateur

Description

Exemple

x ++ *

Cet opérateur unaire permet l'incrémentation de la valeur x

i++
//équivaut à i=i+1

x -- *

Cet opérateur unaire permet la décrémentation de la valeur x

i--
//équivaut à i=i-1

* Si l'un de ces opérateurs est placé avant la variable, alors la valeur de la variable sera incrémentée (++) ou décrémentée (--) avant son utilisation. Par exemple pour i=0, i++ donnera 0 et ++i donnera 1 de même que i-- donnera 0 et --i donnera -1.



5.3.Les opérateurs arithmétiques

Les opérateurs arithmétiques prennent des valeurs numériques (des littéraux ou des variables) comme leurs opérandes et renvoient une valeur numérique.

Les opérateurs arithmétiques standards sont l'addition (+), la soustraction (-), la multiplication (*), et la division (/).



Opérateur

Description

Exemple

x % y

L'opérateur modulo retourne le reste de la division x/y.

20 Mod 3 'retourne 2

x + y

L'opérateur permet d'additionner la valeur x à la valeur y.

5 + 6
'retourne 11

x - y

L'opérateur permet de soustraire la valeur y de la valeur x.

8 – 10
'retourne -2

x * y

L'opérateur permet de multiplier la valeur x par la valeur y.

4 * 9
'retourne 36

x / y

L'opérateur permet de diviser la valeur x par la valeur y en retournant un nombre à virgule flottante.

4 / 16
'retourne 0.25



5.4.Les opérateurs de comparaisons

Ce type d'opérateur compare ses opérandes et renvoie une valeur logique en fonction du résultat. Si la comparaison est vraie, la valeur logique true est retournée sinon false.

Les opérandes peuvent être des valeurs numériques ou des chaînes de caractères.

Les chaînes de caractères sont comparées sur la base du standard lexicographique, en utilisant des valeurs d'Unicode.

Opérateur

Description

Exemples

$x == $y

Si la valeur y est égale à x, l'opérateur retourne true. Dans ce cas, si le type de donnée ne correspond pas, alors PHP tentera de convertir les opérandes dans le type approprié afin d'effectuer la comparaison.

if ($choix == 1)

$x != $y

Si la valeur y est différente de x, l'opérateur retourne true

if ($valeur != $prix)

$x <> $y

Si la valeur y est différente de x, l'opérateur retourne true

if ($valeur <> $prix)

$x === $y

Si la valeur de $y est strictement identique (valeur et type) à $x, alors l'opérateur retourne true

if ($parag = $texte)

$x !== $y

Si la valeur de $y est strictement différente à $x, l'opérateur retourne true

if ($ref !== "A000000")

$x > $y

Si la valeur de $y est supérieure à $x, l'opérateur retourne true

if ($montant > 1500)

$x >= $y

Si la valeur de $y est supérieure ou égale à $x, l'opérateur retourne true

if ($hab >= $pop)

$x < $y

Si la valeur de $y est inférieure à $x, l'opérateur retourne true

if ($numero < $page)

$x <= $y

Si la valeur de $y est inférieure ou égale à $x, l'opérateur retourne

if ($fin <= $premier)



5.5.Les opérateurs logiques

Les opérateurs logiques sont typiquement utilisés pour comparer des expressions ou des nombres et retournent en résultat des valeurs booléennes.

Opérateur

Usage

Description

Exemples

and ou &&

$x and $y

L'opérateur renvoie True si les deux opérandes sont vraies; autrement, il retourne False.

($a<10) and ($b>10)
'Si $a et $b sont inférieurs à 10, l'opérateur retourne True

Or ou ||

$x or $y

L'opérateur renvoie True si l'une ou l'autre des opérandes est vraie ou si toutes les deux sont fausses, sinon il retourne False.

($a >= 1) or ($b == "fin")
'Si $a est supérieur ou égal à 1 ou/et si $b est égal à fin alors l'opérateur renvoie true, sinon il retourne false

xor

$x xor $y

L'opérateur renvoie True si les opérandes sont vraies ou fausses, sinon il retourne False.

($a >= 1) xor ($b == "fin")
'Si $a est supérieur ou égal à 1 et si b est égal à fin ou si les deux expressions sont fausses alors l'opérateur renvoie true, sinon il retourne false

!

! $x

L'opérateur renvoie false si son unique opérande peut être convertie en true, sinon il retourne false.

!($a <= 100)
'Si $a est inférieur ou égal à 100 alors l'opérateur retourne false, sinon il renvoie true.



5.6.Les opérateurs de concaténations

En plus des opérateurs de comparaison qui peuvent être utilisés sur des valeurs de chaîne de caractères, l'opérateur d'enchaînement permet de concaténer deux chaînes de caractères, en retournant une autre qui est le résultat de la concaténation des deux opérandes.

L'opérateur d'affectation .= peut également être utilisé pour enchaîner des chaînes de caractères en boucle.



<?php

echo "mon"  .  " "  .  "programme"

# retourne "mon programme"

?>



<?php

$texte = "Un programme";
$texte_2 = "Hypertext Preprocessor";

resultat = $texte . " " . $texte_2;
# retourne "Un programme Hypertext Preprocessor"

?>



6.Instructions de contrôle

Les instructions conditionnelles permettent de poser une condition avant d'exécuter un bloc d'instructions.

L'instruction conditionnelle la plus répandue dans les scripts demeure la fameuse structure if.



6.1.Structure IF



if (condition) { bloc d'instructions... }

if ($y != 0) { echo "$x / $y = " . $x / $y; }


// peut aussi s'écrire
if ($y != 0)  {
  echo "$x / $y = " . $x / $y; 

}

// mais aussi avec : et endif

if ($y != 0)  :
  echo "$x / $y = " . $x / $y; 

endif



L'instruction if peut être accompagnée de else, voire d'une combinaison else if afin de formuler une alternative par défaut (sinon) ou une ou plusieurs conditions différentes (sinon si).



if (Première condition) { Premier bloc d'instructions... }

else if (Seconde condition) { Second bloc d'instructions... }

...

else if (Nième condition) { Nième bloc d'instructions... }

else { bloc d'instructions par défaut... }


if ($journee == 'matin') { echo "C'est le matin !"; }

else if ($journee == 'après-midi') { echo "C'est l'après-midi !"; }

else if ($journee == 'soirée') ( echo "C'est la soirée !"; )

else { echo "C'est la nuit !"; }



Néanmoins, une telle structure conditionnelle peut être remplacée par une instruction switch dont le fonctionnement est similaire mais dont la syntaxe est bien plus compacte.



6.2.Switch

switch ($variable)

{

case valeur_1 :
Premier bloc d'instructions...
break;

case valeur_2 :
Second bloc d'instructions...
break;
...

case valeur_N :
Nième bloc d'instructions...
break;

default :
bloc d'instructions par défaut...
break;

}



switch ($journee)

{

case 'matin' :
 echo "C'est le matin !";
 break

case 'après-midi' :
 echo "C'est l'après-midi !";
 break

default : echo "C'est la nuit !";

}



La variable $variable est comparée successivement à chacune des valeurs explicitées par l'instruction case.

C'est pourquoi, l'instruction break est nécessaire afin de quitter la structure conditionnelle après que la condition adéquate eut été trouvée.  Par ailleurs, correspondant à else, l'instruction default fournit une alternative par défaut à switch.



6.3.L'instruction ternaire

L'instruction ternaire offre une structure plus compacte sous réserve de ne proposer que deux possibilités selon une condition spécifiée.

$resultat = condition ? première_alternative : seconde_alternative;

Si la condition est vraie alors la première alternative est retournée, sinon c'est la seconde.



6.4.Les boucles

Les boucles permettent de répéter des opérations jusqu'à ce qu'une ou plusieurs conditions soient réunies.

Le langage PHP possède plusieurs instructions itératives. Certaines sont plus orientées vers des opérations spécifiques, d'autres sont utilisables plus généralement.

6.4.1.Les boucles For et Foreach

La boucle for se démarque par sa compacité puisqu'elle contient entre parenthèses trois expressions permettant de l'initialiser (ex : i = 0;) de poser une condition pour continuer (ex : i < 10) et de l'incrémenter ou décrémenter automatiquement (ex : i++).



for (initialisation; condition; incrémentation)

{

bloc d'instructions...

}



Le bloc d'instructions à exécuter dans une boucle for peut être contenu soit à l'intérieur d'accolades, soit une instruction de terminaison spéciale endfor indique sa fin.



for (initialisation; condition; incrémentation)

bloc d'instructions...

endfor;

Littéralement, cette boucle accomplit des opérations à partir d'un état initial et jusqu'à une certaine condition par un pas défini

La boucle foreach est utilisée exclusivement pour les tableaux ou pour toutes autres structures tabulaires.

A chaque itération, l'instruction foreach extrait chaque valeur d'un tableau en la rendant disponible dans le bloc d'instructions.



foreach ($tableau as $valeur)
{
bloc d'instructions...
}



Littéralement, cette boucle accomplit des opérations pour chaque valeur d'un tableau.


6.4.2.Les boucles while et do...while

La boucle while contient essentiellement comme argument une condition d'arrêt toujours évaluée avant chaque itération. L'initialisation et l'incrémentation devront être explicitées dans le code.


while (condition)
{
bloc d'instructions...
}



A l'instar de la boucle for, while possède une instruction de fin endwhile.



while (condition)

bloc d'instructions...

endwhile;



La boucle do...while contrairement à while...endwhile évalue la condition après chaque itération.



do
{
bloc d'instructions...
} while (condition);



Littéralement, ces boucles accomplissent des opérations tant qu'une condition est vraie (faire... tant que...).


6.4.3.Les instructions break et continue

Les instructions break et continue facilitent respectivement la sortie immédiate et l'arrêt pour l'itération en cours d'une boucle, suite à une condition particulière nécessitant une action précise.



while(condition)
{
Bloc d'instructions...
break;
// sortie de la boucle avant la prochaine itération

Bloc d'instructions...
}

while(condition)
{
Bloc d'instructions...

continue;
/* arrêt de la boucle à l'itération en cours
mais passage à l'itération suivante */

Bloc d'instructions...
}



Dans le cas d'une imbrication de plusieurs boucles, les instructions break et continue peuvent utiliser un argument indiquant le niveau de la ou des boucles à quitter.



for(initialisation; condition; incrémentation)

while(condition)

foreach($tableau as $valeur)
{
Bloc d'instructions...
break n;
}

endwhile;

endfor;



Si la valeur n = 1, alors la sortie de la boucle foreach se produit (niveau 1)

Si la valeur n = 2, alors la sortie des boucles foreach et while se produit (niveau 2)

Si la valeur n = 3, alors la sortie des trois boucles se produit (niveau 3)



Le fonctionnement est identique pour l'instruction continue.



6.4.4.Sortie anticipé du script

L'instruction exit permet une sortie anticipée du script en cours

dye("message"), sort, mais après avoir affiché un message d'erreur.


6.4.5.Récapitulatif

if

Si

else

Autrement

elseif

Autrement Si

switch

Selon

while

Chaque fois que (boucle)

for

Tant que (boucle)

==

Strictement égal à

!=

Différent de

<

Plus petit que

>

Plus grand que

<=

Plus petit ou égal

>=

Plus grand ou égal

and ou &&

Et

or ou ||

Ou






7.Chaînes de caractères

Les chaînes de caractères peuvent être constituées de n'importe quel caractère alphanumérique et de ponctuation, y compris les caractères spéciaux.

\t La nouvelle monnaie unique, l' €uro, est enfin là...\n\r

Une chaîne de caractères doit être toujours entourée par des guillemets simples (') ou doubles (").



"Ceci est une chaîne de caractères valide."

'Ceci est une chaîne de caractères valide.'

"Ceci est une chaîne de caractères invalide.'



Des caractères spéciaux à insérer directement dans le texte, permettent de créer directement certains effets comme des césures de lignes.



Car

Code ASCII

Code hex

Description

\car



échappe un caractère spécifique.

" "

32

0x20

un espace simple

\t

9

0x09

tabulation horizontale

\n

13

0x0D

nouvelle ligne

\r

10

0x0A

retour à chariot

\0

0

0x00

caractère NUL

\v

11

0x0B

tabulation verticale

7.1.Les fonctions de chaînes de caractères 

Le langage PHP dispose de nombreuses fonctions permettant de travailler sur les chaînes de caractères.

(voyez le détail à http://fr.php.net/manual/fr/ref.strings.php )



8.Tableaux

Le langage PHP reconnaît deux types de tableaux, les indicés et les associatifs, permettant de regrouper différentes variables ordonnées respectivement par rapport à un indice numérique ou à une chaîne de caractères.

Les tableaux indicés sont composés de plusieurs éléments dont chacun est repéré par une valeur numérique unique.

La première cellule d'un tableau commence toujours par l'indice zéro (0).

Les tableaux indicés peuvent être remplis par l'intermédiaire d'affectations de valeurs à une variable, suivie d'un indice entre crochets.

$tableau[indice] = valeur;

$jour[3] = "Mercredi";

$note[0] = 20;

Il est également possible d'utiliser la fonction array afin de créer et de remplir un tableau.

$tableau = array(valeur0, valeur1,..., valeurN);

$jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");

$note = array(20, 15, 12.6, 17, 10.2, 11, 18, 19);

L'accès aux valeurs contenues dans un tableau indicé s'effectue par l'intermédiaire de son indice numérique.

$variable = $tableau[indice];

$JJ = $jour[6]; # affecte "Samedi" à $JJ

echo $note[1] + $note[5];



8.1.Les tableaux associatifs

Les tableaux associatifs permettent de ranger des données par rapport à une valeur quelconque, telle qu'une chaîne de caractères ou un nombre, utilisé en tant que "clé".

$tableau["indice"] = valeur;

$jour["Dimanche"] = 7

$jour["Mercredi"] = "Le jour des enfants"

Il est également possible d'utiliser la fonction array afin de créer et de remplir un tableau.

$tableau = array(ind0 => val0, ind1 => val1,..., indN => valN);

$jour = array("Dimanche" => 1, "Lundi" => 2, "Mardi" => 3,

"Mercredi" => 4, "Jeudi" => 5,

"Vendredi" => 6, "Samedi" => 7);

L'accès aux données des tableaux associatifs s'effectue par l'intermédiaire de la valeur indiciaire.

$variable = $tableau["indice"];

$JJ = $jour["Vendredi"]; # affecte 6 à $JJ

echo $jour["Lundi"]; # retourne la valeur 2



8.2.Les tableaux multidimensionnels

Dans le langage PHP, il n'existe pas d'outils pour créer directement des tableaux multidimensionnels. Néanmoins, l'imbrication des tableaux étant possible, l'ajout de plusieurs dimensions devient tout à fait réalisable.



$tab1 = array(Val0, Val1,..., ValN);

$tab2 = array(Val0, Val1,..., ValN);

// Création d'un tableau à deux dimensions

$tableau = array($tab1, $tab2);

$mois = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre",

                         "Octobre", "Novembre", "Décembre");

$jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");



$element_date = array($mois, $jour);

L'accès aux valeurs contenues dans un tableau indicé s'effectue par l'intermédiaire de l'indice numérique du tableau conteneur suivi de celui du second tableau.

$variable = $tableau[indice][indice];

$MM = $element_date[0][0]; # affecte "Janvier" à $MM

echo $element_date[1][4] ." 7 ". $element_date[0][2] ." 2002";

// retourne "Jeudi 7 Mars 2002"

Bien qu'il soit possible de créer des tableaux multidimensionnels avec des valeurs panachées, il est préférable d'éviter ce genre de structure dont l'exploitation se révélera vite fastidieuse.

$tableau = array("chaîne", $tab1, Nombre, $tab2);

En général, le parcours des éléments d'un tableau s'effectue au moyen de boucles.



8.3.Le parcours des tableaux

Généralement, le parcours des éléments d'un tableau s'effectue par l’intermédiaire d'une boucle while et plus spécifiquement foreach.

La boucle while nécessite l'utilisation de trois fonctions supplémentaires :

La condition de la boucle while consiste à comparaître la liste de variables au couple clé/valeur en cours.



$tableau = array(val1, val2, ..., valN);
reset($tableau);

while (list(, $valeur) = each($tableau))
{
echo "Valeur: $valeur";
}

$jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");

$i = 0;
reset($jour);

while (list(, $JJ) = each ($jour))
{
echo "La cellule n° ". $i . " : " . $JJ .
"<br>";
$i++;
}



La boucle foreach permet de parcourir tous les éléments d'un tableau à partir d'une structure de boucle simple.



$tableau = array(val1, val2, ..., valN);
foreach($tableau as $valeur)
{
echo "Valeur: $valeur";
}

$jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
$i = 0;
foreach($jour as $JJ)
{
echo "La cellule n° ". $i . " : " . $JJ . "<br>";
$i++;
}



Le parcours d'un tableau associatif est réalisable en ajoutant avant la variable $valeur, la clé associée.



$tableau = array(clé1 => val1, clé2 => val2, ..., cléN => valN);

foreach($tableau as $clé => $valeur)
{
echo "Valeur ($clé): $valeur";
}

$jour = array("Dimanche" => 7, "Lundi" => 1, "Mardi" => 2,
"Mercredi" => 3, "Jeudi" => 4,
"Vendredi" => 5, "Samedi" => 6);

foreach($jour as $sJJ => $nJJ)
{
echo "Le jour de la semaine n° ". $nJJ . " : " . $sJJ . "<br>";
}



8.4.Les fonctions de tableaux

Le langage PHP dispose de nombreuses fonctions permettant de travailler sur les tableaux.

(voyez le détail à http://fr.php.net/manual/fr/ref.array.php )





9.Fonctions utilisateurs

Les fonctions sont des modules où un ensemble d'instructions accomplit une tâche spécifique dans le but de retourner une ou plusieurs valeurs au programme appelant.

Les fonctions peuvent être créées par l'intermédiaire de l'instruction function.



<?php

function nom_fonction([$param_1 [= val_déf],..., $param_N [= val_déf]])
{
Bloc d'instructions...
[return valeurs...;]
}

$resultat = nom_fonction([arg_1, ..., arg_N]);

?>



L'utilisation d'une fonction nécessite la définition d'un nom, puis éventuellement d'un ou plusieurs paramètres avec le cas échéant leur valeur par défaut qui seront traités par un bloc d'instructions.

Enfin, le nom de la fonction et des arguments permettront l'appel de la fonction à un endroit quelconque d'une application PHP.

Les paramètres dans une fonction peuvent être facultatifs, car la valeur de retour peut être indépendante de toute donnée extérieure.



// fonction sans argument

function RepeterCesure()
{
 for($i = 0; $i < 5; $i++)
 {
   $cesure .= '<br>';
 }
 return $cesure;
}

echo RepeterCesure()

// fonction avec argument

function RepeterCesure($nombre)
{
for($i = 0; $i < $nombre; $i++)
{
$cesure .= '<br>';
}
return $cesure;
}

echo RepeterCesure(5);



Les fonctions retournent un résultat au programme appelant par l’intermédiaire de l'instruction return. Les valeurs de retour peuvent être de n'importe quel type comme des nombres, des chaînes de caractères, des tableaux ou des objets.

Les fonctions variables consistent à affecter à des variables, des fonctions. Ces variables particulières utilisent les instructions de la fonction à leur profit.



function multiplication($nombre, $multiplicateur)
{
echo '$nombre * $multiplicateur = ' . $nombre * $multiplicateur;
}

$fois = 'multiplication';

$fois(100, 12); // retourne '100 * 12 = 1200'



9.2.Arguments de fonction

Il est possible de passer des arguments à une fonction soit par valeur, soit par référence.

Les valeurs passées puis traitées par la fonction peuvent être des valeurs simples de tout type, y compris des tableaux.

 

function fonction($tableau)
{
 foreach($tableau as $valeur)
 {
   $resultat *= $valeur;
 }
 return $resultat;
}

$valeurs = array(1, 2, 3, 4, 5);

echo fonction($valeurs); # retourne 120



Dans le premier cas, les arguments sont des valeurs passées à la fonction lors de l'appel de cette dernière.
Par la suite, ces valeurs affectées à leur variable respective dans la fonction, sont utilisées dans le bloc d'instructions.

<?php

function prefixe($pfx, $balise)
{
$balise = $pfx . '.' . $balise;
return $balise;
}

$balise = 'element_racine';

echo '<' . $balise . '>';
# retourne '<element_racine>'

echo '<' . prefixe('rso', $balise) . '>';
# retourne '<rso.element_racine>'

echo '<' . $balise . '>';
# retourne '<element_racine>'

?>


Les paramètres sont facultatifs, et contiennent NULL, sauf à fournir une valeur par défaut sous la forme function fonction(param1=dft1, param2=dft2)

Dans cet exemple, la variable $variable définie dans la fonction ne modifie absolument pas la variable de même nom déclarée dans le programme appelant.

Ainsi, dans le cas d'un passage d'argument par valeur, la variable contenant cette valeur dans le programme appelant ne sera pas affectée par des opérations dans la fonction.

Néanmoins, il est possible de passer des arguments par référence (comme en RPG). Cela entraîne la possibilité de modification des variables du programme appelant impliquées par la fonction.



// Passage d'arguments par référence sur la fonction

function incrementation(&$inc)
{
return $inc += 100;
}

$i = 0;

echo 'i = ' . $i; # affiche 0;

incrementation($i);

echo 'i = ' . $i; # affiche 100;





// Passage d'arguments par référence lors de l'appel de la fonction

function incrementation($inc)
{
return $inc += 100;
}

$i = 0;

echo 'i = ' . $i; # affiche 0;

incrementation(&$i);

echo 'i = ' . $i; # affiche 100;

incrementation($i);

echo 'i = ' . $i; # affiche 100 et non 200;



Le passage d'arguments par référence défini au niveau de la fonction implique une modification constante de la variable spécifiée, alors que si le passage par référence s'effectue lors de l'appel de la fonction, le résultat demeure le même tout en restant limité à cet appel.



9.3.Variables des fonctions

Les variables présentes au sein d'une fonction sont par définition locales, mais sous réserve d'une déclaration spéciale, leur portée peut être globale ou par ailleurs d'un type statique.

Toutes les variables déclarées dans une fonction sont utilisables localement. Elles ne peuvent être appelées et utilisées dans le corps du programme.



function SurfaceTriangle($largeur, $hauteur)
{
$resultat = ($largeur * $hauteur) / 2;
return $resultat;
}

echo SurfaceTriangle(20, 10) . " cm<sup>2</sup>;
// retourne 100 cm2

echo "($largeur * $hauteur) / 2 = " . $resultat;
// instruction erronée : variables indéfinies.



Les variables globales peuvent être utilisées dans une fonction à condition de déclarer à nouveau les variables dans la fonction avec le mot-clé global ou en utilisant le tableau associatif prédéfini $GLOBALS.



$var_glo = valeur;

function Fonction()
{
global $var_glo;
$var_glo++;
}

function Autre_Fonction()
{
$GLOBALS["var_glo"]++;
}



Par ailleurs, des variables peuvent être déclarées statiques dans une fonction afin de les utiliser récursivement dans la fonction elle-même.



function Fonction()
{
static $variable = 0;

$variable++;

  if($variable <= 0) {
  Fonction();
 }


}



Dans cet exemple, si la variable n'est pas statique, sa valeur restera toujours nulle puisque son initialisation à zéro annulera son incrémentation.


10.Expressions régulières

Les expressions régulières sont des modèles utilisés pour vérifier des combinaisons spécifiques de caractère dans les chaînes.

Plusieurs fonctions et instructions utilisent de tels modèles afin d'accomplir diverses opérations sur des chaînes de caractères.



10.1.Les symboles de délimitation

Les expressions régulières permettent d'effectuer des manipulations complexes de chaînes de caractères, en utilisant des modèles (pattern) répondant à des règles de syntaxes précises.

Tout d'abord, plusieurs symboles spéciaux permettent de délimiter précisément un modèle :



$chaine = "Le loup est dans la bergerie.";

// recherche 'Le' en début de chaîne
$regexp = "^Le";

// recherche 'rie.' en fin de chaîne
$regexp = "rie\.$";

// recherche 'ber' au début d'un mot ex: 'bergerie'
$regexp = "\bber";
$regexp = "\sber";
$regexp = "\Wber";

// recherche 'rie' à la fin d'un mot ex: 'bergerie'
$regexp = "rie\b";
$regexp = "rie\W";





/* recherche 'rie' à la fin d'un mot mais ne le trouve pas car 'bergerie' se termine par un point et pas par un espace blanc */

$regexp = "rie\s";

// recherche 'but' à la fin d'un mot ex: 'début'

$regexp = "but\s"

// recherche 'ger' dans un mot ex: 'bergerie'

$regexp = "\Bger";

$regexp = "\Sger";

$regexp = "\wger";



Si une expression régulière ne contient aucun des deux symboles '^' ou '$', alors le domaine de recherche peut être situé n'importe où dans la chaîne de caractères (si la chaine contient ..)

 

$regexp = "dans"

$regexp = "loup"



10.2.Nombre d'occurrences

Trois symboles spéciaux, soit les signes : étoile (*), plus (+) et point d'interrogation (?), fournissent des solutions pour signifier un certain nombre d'occurrences possible d'un caractère dans une expression régulière.





// recherche '21', 210', '2100', '21000', etc..

$regexp = "21*";


// recherche 'cré', 'créé'

$regexp = "cré+";


// recherche 'pa' ou 'pas'.

$regexp = "pas$";


// recherche 'occurrence', 'occurrences' mais aussi malgré

une orthographe erronée 'ocurence' ou 'ocurences', etc..

$regexp = "oc+ur+ences?";



Afin de limiter ou de préciser le nombre d'occurrences, il suffit d'utiliser ce nombre à l'intérieur d'accolades placées avant le caractère.



// recherche 'créé'

$regexp = 'cré{2}';


// recherche de '1000' jusqu'à '1000000000'.

$regexp = '10{3, 9}';


// recherche 'as' ou 'ass'.

$regexp = 'as{1, 2}';



10.3.Mise en correspondance des caractères

Le point (.) dans une expression régulière représente n'importe quel caractère.



/* recherche toute séquence commençant par un 'a' et terminant par un 'e' comme 'ate' ou 'aie'. */

$regexp = "a.e";


// recherche par exemple 'occurrence' ou 'occurrences'.

$regexp = "oc{2}.*r{2}.*es?";



Les crochets ([]) dans une expression régulière servent à mettre en place une structure alternative où chacun des caractères qu'elle comprend pourra se trouver dans une chaîne de caractères. Un signe moins (-) entre deux caractères désigne une plage de lettres ou de chiffres.



// correspond à 'A | B'.

$regexp = "[AB]";


// recherche n'importe quelle lettre comprise entre a, z, A et Z.

$regexp = "[a-zA-Z]";


/* recherche toutes chaînes de caractères comprenant des caractères alphanumériques spécifiés. */

$regexp = "^[a-zA-Zàäâéèëêîîöôùüûç0-9]+";



Il est également possible d'exclure des caractères par l'intermédiaire de l'accent circonflexe (^) à l'intérieur des crochets.



// exclut les chiffres de la recherche.

$exp = "[^0-9]";

/* exclut les lettres alphabétiques minuscules et les chiffres en fin de chaîne. */

$regexp = "[^a-b0-9]$";



Le caractère d'échappement anti-slash (\) permet d'inclure des caractères spéciaux dans une expression régulière.



// recherche le signe euro, dollar ou livre.

$regexp = "(€|\$|£)";


/* recherche un point d'interrogation à la fin d'une chaîne de caractères. */

$regexp = "\?$";


// recherche le crochet ouvrant

$regexp = "\["Les crochets évitent l'utilisation du caractère d'échappement pour les caractères spéciaux.


// recherche les caractères indiqués.

$regexp = "[(){}.*+?$\]";





10.4.Les fonctions d'expressions régulières

Le langage PHP dispose de plusieurs fonctions permettant de travailler sur les expressions régulières (regexp).





11.Fonctions Date et Heure

Le langage PHP dispose de nombreuses fonctions permettant de travailler sur les dates et les heures.

(voyez le détail à http://fr.php.net/manual/fr/ref.datetime.php )

11.1.Les formats de date et d'heure

Plusieurs fonctions traitant des dates et des heures contiennent un argument spécifique pour le formatage d'expressions temporelles.

$format = "d / m / Y";

$chaine = date($format);

// $chaine contient '24 / 03 / 2002'



Format
Description

a

représente am (matin) ou pm (après-midi).

A

représente AM (matin) ou PM (après-midi).

B

représente une heure Internet Swatch.

d

représente le jour du mois sur deux chiffres allant de 01 à 31.

D

représente le jour de la semaine en trois lettres et en anglais (Sun, ..., Sat).

F

représente le mois complet en anglais (January, ..., December).

g

représente une heure au format 12 heures allant de 1 à 12.

G

représente une heure au format 24 heures allant de 1 à 24.

h

représente une heure au format 12 heures avec un zéro de complément allant de 00 à 11.

H

représente une heure au format 24 heures allant de 00 à 23.

i

représente les minutes allant de 00 à 59.

I

est égal à 1 si l'heure d'été est activée ou 0 pour l'heure d'hiver.

j

représente le jour du mois allant de 1 à 31.

l

représente le jour de la semaine complet et en anglais (Sunday, ..., Saturday).

L

est égal à 1 si l'année est bissextile, sinon 0.

m

représente un mois allant de 01 à 12.

M

représente un mois en trois lettres et en anglais (Jan, ..., Dec).

n

représente un mois allant de 1 à 12.

O

représente la différence d'heures avec l'heure de Greenwich (+0100).

r

représente un format de date conforme au RFC 822
(Mon, 25 Mar 2002 05:08:26 +0100).

s

représente les secondes allant de 00 à 59.

S

représente le suffixe ordinal d'un nombre en anglais et sur deux lettres th ou nd.

t

représente le nombre de jours dans le mois (28, 29, 30 ou 31).

T

représente le fuseau horaire.

U

représente les secondes depuis une époque.

w

représente le jour de la semaine allant de 0 (Dimanche)
à 6 (Samedi).

Y

représente une année sur quatre chiffres (2002).

y

représente une année sur 2 chiffres (02).

z

représente le jour de l'année allant de 0 à 365.

Z

représente le décalage horaire en secondes.







12.Les formulaires

Les formulaires permettent de retourner des informations saisies par un utilisateur vers une application serveur.



<form method="GET | POST" action="page_cible.php">

<input type="text" name="Champ_saisie" value="Texte">

<select name="Liste_Choix" size="3">
<option value="Option_1">Option_1</option>
<option value="Option_2">Option_2</option>
<option value="Option_3">Option_3</option>
</select>

<textarea name="Zone_Texte" cols="30" rows="5">
Texte par défaut
</textarea>

<input type="checkbox" name="Case_Cocher" value="Case_1">
Case à cocher 1<br>

<input type="checkbox" name="Case_Cocher" value="Case_2">
Case à cocher 2<br>

<input type="checkbox" name="Case_Cocher" value="Case_3">
Case à cocher 3<br>

<input type="radio" name="Case_Radio" value="Case radio 1">
Case radio 1<br>

<input type="radio" name="Case_Radio" value="Case radio 2">
Case radio 2<br>

<input type="radio" name="Case_Radio" value="Case radio 3">
Case radio 3<br>

<input type="cancel" name="Annulation" value="Annuler">
<input type="submit" name="Soumission" value="Soumettre">

</form>



La transmission d'un formulaire s'effectue selon une des deux méthodes d'envoi GET ou POST.

La méthode GET place les informations d'un formulaire directement à la suite de l'adresse URL de la page appelée. Mais cette méthode n'offrant aucune discrétion tend à devenir obsolète.

http://www.site.com/cible.php?champ=valeur&champ2=valeur

La méthode POST regroupe les informations dans l'entête d'une requête http ; assurant ainsi une confidentialité des données efficace.

Lors de la soumission à une page de traitement, quand l'option register_global est fixée à on dans php.ini, chaque élément de saisie est assimilé à une variable PHP dont le nom est constitué par la valeur de l'attribut name et son contenu par la valeur de l'attribut value.

<?php

$resultat = $Champ_saisie . "<br>";

$resultat .= $Liste_Choix . "<br>";

$resultat .= $Zone_Texte . "<br>";

for ($i = 0; $i < count($Case_Cocher); $i++)
{
$resultat .= $Case_Cocher[$i] . "<br>";
}

$resultat .= $Case_Radio . "<br>";

?>



La plupart des éléments d'un formulaire n'acceptent qu'une seule et unique valeur, laquelle est affectée à la variable correspondante dans le script de traitement.

$Champ_Saisie = "Ceci est une chaîne de caractères.";

Tandis que pour des cases à cocher et les listes à choix multiples, plusieurs valeurs peuvent être sélectionnées entraînant l'affectation d'un tableau de valeurs aux variables correspondantes.

$Case_Cocher[0] = "Case radio 1";

$Case_Cocher[1] = "Case radio 3";

La valeur par défaut pour register_global, pour des raisons de sécurité, est fixée à off sur les dernières versions

il faut alors utiliser :

  1. $_GET['le nom du champ'] pour un formulaire utilisant la méthode GET
    (ou la tableau associatif$HTTP_GET_VARS['lenom'].)
  2. $_POST['le nom du champ'] pour un formulaire utilisant la méthode POST
    (ou la tableau assiciatif$HTTP_GET_VARS['lenom'].)
Vous pouvez utiliser la fonction isset pour traiter les deux cas de figure :

<?php

if ( isset($_POST['Champ_saisie'] ))

{

$champ = $_POST['Champ_saisie'];

} else {

$champ = $_GET['Champ_saisie'];

}

?>



La page de traitement d'un formulaire peut être aussi bien un document cible spécifique que la page elle-même. Dans ce cas, la page doit contenir un dispositif spécial permettant de recueillir ses propres données et la valeur de l'attribut ACTION de la balise FORM doit être sa propre adresse. Un moyen simple consisterait à utiliser une variable d'environnement telle que $PHP_SELF, $PATH_INFO ou encore $SCRIPT_NAME.



<?php

if ($champ_saisie != 'Texte')
echo 'Vous avez écrit dans le champ de saisie, le texte suivant : '
.$champ_saisie;

?>

<form method="POST" action="<?php echo $PHP_SELF ?>">
<input type="text" name="champ_saisie" value="Texte">
<input type="submit" name="Soumission" value="Soumettre">
</form>


13.Objets

Le langage PHP supporte certaines notions de la programmation orientée objet et permet ainsi de développer ses propres objets possédant des caractéristiques spécifiques pour des applications Internet ambitieuses.

Les objets sont issus d'instanciations de classes qui leur fournissent des attributs, des propriétés et des méthodes permettant d'accomplir des tâches prédéfinies dans un script.



13.1.Les classes

Une classe est une structure de référence à partir de laquelle se concrétise un objet.

Le code au sein d'un module de classe décrit :

D'autre part, les caractéristiques des attributs telles que leur type de données et leur valeur sont appelées les propriétés que possédera l'objet suite à sa création.

Une classe est conçue à partir de l'instruction class qui contiendra la déclaration des attributs ainsi que les fonctions et leurs instructions.



class nom_classe
{
// Déclarations des attributs
var $attribut_1;
var $...
var $attribut_N;

// Déclarations des fonctions
function nom_fonction_1 (param_1, ..., param_N)
{
[$this->attribut_1 = valeur;]
Bloc d'instructions...
}
...
function nom_fonction_N (param_1, ..., param_N)
{
[$this->attribut_1 = valeur;]
Bloc d'instructions...
}
}



Dans une classe, la variable spéciale $this permet à une fonction d'accéder aux propriétés d'un attribut.

Ensuite, un objet est créé au moyen d'une instanciation de la classe par l'intermédiaire de l'instruction new.

$objet = new nom_classe;

A partir de l'objet, il devient possible d'accéder à ses propriétés et à ses méthodes en utilisant un tiret '-' suivi d'un signe supérieur à '>' entre le nom de l'objet et respectivement le nom de l'attribut et de la fonction déclarées dans la classe.



// Accès aux propriétés de l'objet

$nom_objet->nom_attribut = valeur;


// Accès aux méthodes de l'objet

$nom_objet->nom_fonction(param_1, ..., param_N);





14.Gestion des fichiers

Le langage PHP propose de nombreux outils permettant de manipuler les fichiers et les dossiers présents sur les disques durs du serveur.

Evidemment, une telle application ne devra pas être accessible aux utilisateurs ne disposant pas d'une permission appropriée. Les risques de malveillance sont d'autant plus importants, qu'il est nécessaire de renforcer la sécurisation du serveur.

L'ouverture d'un dossier ou d'un fichier s'effectue respectivement par l'entremise des fonctions opendir et fopen.



<?php

$repertoire = "repertoire/";
$dossier = opendir($repertoire);

$fichier = readdir($dossier);
fopen($fichier, r+);

?>



La fonction readdir permet de lire une entrée du dossier spécifié, soit le fichier sur lequel est disposé le pointeur de dossier.

Plusieurs fonctions PHP servent à vérifier une caractéristique intrinsèque ; par exemple, si une variable de système de fichiers est un répertoire (is_dir), un fichier (is_file), un exécutable (is_executable), un lien (is_link) ou encore si le fichier est ouvert en lecture seule (is_readable), en écriture seule (is_writeable) et enfin si le fichier a été téléchargé par la méthode HTTP POST (is_uploaded_file).



<?php

$chemin = "c:\\site\\";

if (is_dir($chemin))
{ echo $chemin .
" est un dossier !"; }

$chemin = "c:\\site\\index.html";

if (is_file($chemin))
{ echo $chemin .
" est un fichier !"; }

?>

Pour les fichiers, la fonction file_exists s'assure de l'existence du fichier au chemin spécifié.

$valide = file_exists($fichier);

Il est possible de parcourir les entrées d'un dossier en utilisant une boucle while, dont la condition peut être la lecture d'un dossier par la fonction readdir renvoyant lorsque la fin est atteinte, la valeur booléenne false.



<?php
$i = 0;
$dir = "C:\\Inetpub\\wwwroot\\laltruiste\\coursphp\\";
$dossier = opendir($dir);

while ($entree = readdir($dossier))
{
$i++;
echo $i . ' : <a href="http://www.laltruiste.com/cousphp/'
. $entree . '">' . $entree . '</a><br>';
}

closedir($dossier);
?>



Les fichiers peuvent être lus fread ou écrits fwrite, suite à leur ouverture par fopen.



<?php

$id_fichier = fopen("fichier.html", "r");
$taille = filesize("fichier.html");
echo str_replace("<", "&lt;", fread($id_fichier, $taille));

?>



<?php

$id_fichier = fopen("fichier.html", "w");

$script = '<?php echo getlastmod() ?>';

fwrite($id_fichier, $script);

fclose($id_fichier);

?>

Les fichiers peuvent délivrer plusieurs informations à l'aide de fonctions appropriées telles que filesize pour leur taille, filetype pour le type, fileatime, filectime et filetmime pour la date et l'heure du dernier accès ou de la dernière modification, ou encore stat, fstat, et lstat retournant un tableau de caractéristiques.



<?php

$chemin = "c:\\autoexec.bat";

$id_fichier = fopen($chemin, "r");
echo "taille totale de $chemin : " . filesize($chemin) . " octets<br>";
echo "Date et heure du dernier accès : ". fileatime($fichier)
. " " . filectime($fichier) . "<br>";

echo "Date de la dernière modification : ". filemtime($fichier) ."<br>";

print_r(fstat($id_fichier));
fclose($id_fichier);

?>



D'autre part, le pointeur de fichier se place directement au début, soit à l'octet 0 d'un fichier lors de l'ouverture de ce dernier. La fonction fseek est capable de modifier la position du pointeur d'un certain nombre d'octets, tandis que ftell retourne cette position. Quant à rewind, il le ramène à la position initiale du fichier.



<?php

$chemin = "c:\\autoexec.bat";

$id_fichier = fopen($chemin, "r");

echo "Position initiale : " . ftell($id_fichier) . "<br>";

fseek($id_fichier, filesize($chemin));

echo "Position de fin : " . ftell($id_fichier) . "<br>";

rewind($id_fichier);

echo "Position de retour : " . ftell($id_fichier) . "<br>";

fclose($id_fichier);

?>



La fermeture d'un dossier s'accomplit par la fonction closedir, alors que celle d'un fichier se fait par fclose.



14.1.Le téléchargement de fichier

Le langage PHP 4 dispose de plusieurs outils facilitant le téléchargement vers le serveur et la gestion des fichiers provenant d'un client.

Un simple formulaire comportant un champ de type file suffit au téléchargement d'un fichier qui par la suite, devra être traité par un script PHP adapté.



<form method="POST" action="traitement.php" enctype="multipart/form-data">

<input type="hidden" name="MAX_FILE_SIZE" value="Taille_Octets">

<input type="file" name="fichier" size="30"><br>

<input type="submit" name="telechargement" value="telecharger">

</form>



Un champ caché doit être présent dans le formulaire afin de spécifier une taille maximum (MAX_FILE_SIZE) pour le fichier à télécharger. Cette taille est par défaut égale à deux mégaoctets.

En PHP 4, le tableau associatif global $HTTP_POST_FILES contient plusieurs informations sur le fichier téléchargé, à condition que l'option de configuration track_vars soit activée dans le fichier php.ini.

PHP 3 quant à lui, peut faire appel au variable globale ou/et au tableau associatif global $HTTP_POST_VARS à condition que les options de configuration register_globals et track_vars soient activées respectivement dans le fichier php.ini.

Par défaut, le fichier envoyé par le client est stocké directement dans le répertoire indiqué par l'option de configuration upload_tmp_dir dans le fichier php.ini.

upload_tmp_dir = c:\PHP\uploadtemp



Il est possible de télécharger plusieurs fichiers en même temps, en utilisant des crochets à la suite du nom du champ afin d'indiquer que les informations relatives aux fichiers seront stockées dans un tableau.



<form action="traitement.php" method="POST"
enctype="multipart/form-data">

<input type="file" name="fichier[]"><br>
...
<input type="file" name="fichierN[]"><br>
<input type="submit" value="Envoyer" name="soumission">

</form>

...

for($i = 0; $i < sizeof($HTTP_POST_FILES['fichier']['name']); $i++)
{
echo "Nom du fichier : " . $HTTP_POST_FILES['fichier']['name'][$i];
}


Les fichiers téléchargés sont automatiquement effacés du répertoire temporaire au terme du script. Ainsi, il est nécessaire de déplacer les fichiers vers un autre endroit ou de les renommer si ceux-ci doivent être conservés.



14.2.Les fonctions de dossiers

Le langage PHP dispose de nombreuses fonctions permettant de travailler sur les dossiers.

(voyez la documentation à http://fr.php.net/manual/fr/ref.dir.php )



15.Les erreurs

15.1.Le préfixe arobase @

Le préfixe arobase @ devant une expression entraîne l'annulation du rapport d'erreur de cette expression, tout en conservant les messages d'erreurs dues aux erreurs d'analyse.

@file("http://www.site.com/fichier.txt");

Toutefois, si une erreur se produisait alors que l'option de suivi des erreurs dans php.ini serait activée (track_errors TRUE), il sera possible de récupérer le message d'erreur dans la variable globale, $PHP_ERRORMSG.

Message : <?php echo $PHP_ERRORMSG ?>.

L'opérateur de désactivation de rapport d'erreur @ agit pour toutes les erreurs, ce qui pourrait provoquer un arrêt impromptu du script sans aucune indication. C'est pour cela qu'il est nécessaire d'utiliser avec précaution cet opérateur afin d'éviter tout problème inopportun.

15.2.Les erreurs HTTP 404

Un message d'erreur de type HTTP 404 correspond à un fichier non trouvé car l'adresse n'est pas valide ou le fichier n'existe pas sur le serveur.

Dans le cas où le serveur web du site est Apache, il suffit alors de copier un fichier dénommé .htaccess sous la racine du site.

Le fichier .htaccess doit comporter une ligne spécifiant le fichier personnalisé auquel le système devra accéder en cas d'erreur HTTP 404.

ErrorDocument 404 /error.php

Ainsi, lorsqu'un utilisateur essaiera d'accéder à une page par un lien invalide, la page error.php s'ouvrira en affichant un contenu personnalisé.

L'adresse URL fautive peut être précisée dans la page en utilisant une variable spéciale $REDIRECT_URL.

L'adresse URL <? echo $REDIRECT_URL?> n'est pas valide.

Par ailleurs, le fichier error.php peut contenir diverses fonctionnalités comme une redirection automatique sur la page précédente avec un envoi d'un rapport d'erreur à la boîte email d'un responsable ou à un fichier journal, ou encore à une base de données.



16.Les cookies

Les cookies permettent de sauvegarder chez le client des informations relatives à sa visite sur un site.

Lors de la prochaine visite, PHP est capable de lire ces informations afin d'authentifier l'utilisateur et de reconstituer un environnement adapté.

La fonction setcookie permet d'envoyer un cookie sur l'ordinateur client.

setcookie(nom_cookie [, valeur [, date_expiration [, chemin [, domaine [, sécurisation]]]]]);



<?php

setcookie("Session_site", SID, time()+3600*24, "/", ".site.com", 0);

/* envoi d'un cookie non sécurisé contenant, l'identifiant de session du site 'site.com' avec une durée de vie de 24 heures */

?>

time()+3600*12 : cookie valable entre : 10:12:00 - 22:12:00

Une date précise peut être également entrée en utilisant la fonction mktime.

mktime(0,0,0,31,12,2002)
// Le cookie sera valable jusqu'au 31 décembre 2002

Les cookies faisant partie des en-têtes HTTP, la fonction setcookie doit être appelée avant l'affichage d'un document ; c'est pourquoi il faut placer l'instruction avant le balisage HTML.



<?php

setcookie("Nom", "Valeur");

?>

<html>
...
</html>



Les cookies envoyés au client sont automatiquement retournés à l'application PHP afin d'être convertis en une variable à l'instar des champs de saisie des formulaires, toujours avec la même option dans php.ini : register_global.



<?php

echo $Session_site; // si register_global
echo $HTTP_COOKIE_VARS["Session_site"];

?>

Il existe deux possibilités pour récupérer les valeurs d'un cookie, soit par la variable globale correspondante (si register_global), soit par $_COOKIE['le nom'], ou par le tableau associatif global $HTTP_COOKIE_VARS.

Il est possible de passer plusieurs valeurs à un cookie par l'intermédiaire de crochets '[]' suivant le nom du cookie.



<?php

setcookie( "site['sid']", SID );

setcookie( "site['couleur']", $couleur );

setcookie( "site['police']", $police );

if (isset($site))
{

while(list($nom, $valeur) = each($site))
{
echo $nom . " = " . $valeur .
"<br>";
}

}

?>



La suppression d'un cookie peut s'effectuer par l'intermédiaire de la réémission d'un cookie de même nom mais avec une valeur vide.

setcookie("Session_site");



17.Sessions

Les sessions permettent de conserver des informations relatives à un utilisateur lors de son parcours sur un site web.

Ainsi, des données spécifiques à un visiteur pourront être transmises de page en page afin d'adapter personnellement les réponses d'une application PHP.

Chaque visiteur en se connectant à un site reçoit un numéro d'identification dénommé identifiant de session (SID).

La fonction session_start se charge de générer automatiquement cet identifiant unique de session et de créer un répertoire



<?php

session_start();

$Session_ID = session_id();
// $Session_ID = 7edf48ca359ee24dbc5b3f6ed2557e90

?>



La fonction session_start doit être placée au début de chaque page afin de démarrer ou de continuer une session.

Par ailleurs, un répertoire est créé sur le serveur à l'emplacement désigné par le fichier de configuration php.ini, afin de recueillir les données de la nouvelle session.

Le fichier php.ini peut également préciser un nom de session par l'option session.name ou sa durée de vie par session.gc_maxlifetime.

La session en cours peut être détruite par le truchement de la fonction session_destroy. Cette commande supprime toutes les informations relatives à l'utilisateur.

session_destroy();



17.1.La gestion des connexions

Le langage PHP dispose de plusieurs outils permettant de gérer les connexions des utilisateurs sur un site web.

Il existe trois états possibles en ce qui concerne le statut des connexions.

Les deux états ABORTED et TIMEOUT peuvent survenir en même temps dans le cas où, d'une part si PHP est configuré de telle sorte à ignorer les déconnexions et d'autre part lorsque le script arrive à expiration.

En principe, l'état ABORTED interrompt logiquement le script dès que l'utilisateur se déconnecte du site. Toutefois, il est possible de modifier ce comportement en activant l'option de configuration ignore_user_abort dans le fichier php.ini.

En outre, si une fonction de fermeture a été enregistrée avec l'instruction register_shutdown_function, le moteur de script se rendra compte après que le client se soit déconnecté puis lors de la prochaine exécution du script que celui ci n'est pas terminé, ce qui provoquera l'appel de la fonction de fermeture mettant fin au script. Lorsque le script se termine normalement, cette fonction sera également appelée.

L'instruction connection_aborted permet d'exécuter une fonction spécifique à la déconnexion d'un client. Si la déconnexion est effective, la fonction connection_aborted retourne true.

Un script expire par défaut après une durée de 30 secondes. Néanmoins, ce temps peut être modifié par l'intermédiaire de l'option de configuration max_execution_time dans le fichier php.ini.

Une fonction se chargeant de terminer le script sera appelée si le délai arrive à expiration ou si le client se déconnecte.

Les fonctions connection_timeout, connection_aborted et connection_status permettent respectivement de vérifier si l'état de la connexion est ABORTED, TIMEOUT et si les trois états possibles.



17.2.Les fonctions de connexions

Le langage PHP dispose de plusieurs fonctions permettant de gérer les connexions des clients sur une application PHP.



17.3.Le traitement des variables de session

Les variables de session sont chargées dans une session par l'intermédiaire de la fonction session_register ou $_SESSION



<?php

session_start();

session_register("nom_variable"); // si register_global

...

$_SESSION['nom_variable'] = $nom_variable; //sinon,

?>



Deux options de configuration déterminent le traitement des variables d'une session dans une application PHP.

Si l'option de configuration track_vars est activée et register_globals désactivée, les variables de la session seront disponibles seulement avec $_SESSION['le nom'] ou à partir du tableau associatif global $HTTP_SESSION_VARS.




$_SESSION["nom_variable"] = $VALEUR;

...

echo $_SESSION["nom_variable"] ;



Si l'option de configuration register_global est activée, les variables de la session seront disponibles à partir des variables globales correspondantes.



session_register("nom_variable");

...

echo $nom_variable;



Si les options track_vars et register_globals sont activées, les variables globales et $HTTP_SESSION_VARS contiendront les valeurs des variables de la session en cours.

Le transport des informations entre les documents est réalisé soit par l'entremise d'un cookie, soit d'une requête HTTP. La dernière solution semble être la plus fiable puisque les cookies peuvent ne pas être acceptés par le client ou celui-ci pourrait les détruire en cours de session.



$Session_ID = session_id();

$nom_session = session_name();

$adresse = 'http://www.site.com/doc.html';

$lien = 'Le prochain document';

print_f('<a href="%s?%s=%s">%s</a>',

$adresse_url, $nom_session, $Session_ID, $lien);

echo '<a href="' . $adresse_url . SID . '">' . $lien . '</a>'

/* affichent <a href="http://www.site.com/ doc.html?
PHPSESSID=7edf48ca359ee24dbc5b3f6ed2557e90">
Le prochain document</a> */

// redirection automatique

header("Location:" . "$adresse . "?" . SID);

Il suffit donc simplement de concaténer l'identifiant de session à l'adresse URL de la page cible pour que cette dernière puisse accéder aux informations conservées par la session. De plus, un mot-clé spécial SID contient le nom de session et l'identifiant séparé par un signe égal.

Si la directive de compilation enable-trans-sid est activée, il sera possible de ne pas ajouter l'identifiant de session à l'adresse URL pointée. Pour savoir si cela est le cas, il suffit de rechercher la directive dans la page résultant de la fonction phpinfo.

Par défaut, PHP tente de passer par les cookies pour sauvegarder l'identifiant de session dans le cas où le client les accepterait. Pour éviter cela, il suffit de désactiver l'option de configuration session.use_cookies dans le fichier php.ini.

Dans la situation où il serait nécessaire d'utiliser les cookies, il est impératif de doubler les moyens de conservation du SID.



17.4.Les fonctions de sessions

Le langage PHP dispose de nombreuses fonctions permettant de travailler avec les sessions.

(voyez la documentation à http://fr.php.net/manual/fr/ref.session.php )





18.Envoi de courrier

L'envoi de courrier électronique s'effectue par l'intermédiaire de la fonction mail().

true | false = mail(destinataires, sujet, message[, entête][, paramètres])

Cette instruction permet d'envoyer des messages simples à un ou plusieurs destinataires,


mais ATTENTION, en utilisant sendmail, non disponible tel que sur i5/OS sauf en installant Zend Core for I5/OS.

Si vous utilisez une version  téléchargée de PHP (en mode CGI) voyez  alors phpmailer à http://phpmailer.sourceforge.net/

ou installez la version définitive de ZendCore for I5/OS (V1.4 et suivantes) qui rend cette fonction disponible.

// Envoi d'un email simple à plusieurs destinataires.
$sujet = "Newsletter n°125";
$message = "Sommaire de la Newsletter..."  .   "\r\nContenu...\r\nMerci\r\n";


mail("af400@volubis.fr, someone@free.fr, unautre@aol.com", $sujet,$message)


Toutefois, il est nécessaire de configurer correctement le fichier php.ini , section [mail function] pour utiliser cette fonction.

Des courriers électroniques plus complexes peuvent être construits comportant non seulement une structure de message élaborée en HTML par exemple, mais aussi un entête (headers) spécifique correspondant au contenu et devant suivre les spécifications MIME.

Un courrier électronique est décomposable en plusieurs parties dont la première constitue l'entête du message avec des champs indiquant les adresses du destinataire et de l'expéditeur, ainsi que le sujet du message entre autres et la seconde correspondant au corps du message. Ce dernier peut également être divisé en plusieurs sous-parties renfermant un contenu mixte ou alternatif.

$entete = "From: expediteur@dom.com";

$entete .= "To: destinataire@dom.net";

mail($adresse, $sujet, $corps, $entete);




Exemple de traitement d’un formulaire pour l’envoi d’un message

<?php
// Fichier : traitement.php

$valide = true;
$exp_reg_email = "^[a-z0-9]+((\.|-|_)[a-z0-9]+)*@[a-z0-9]+((\.|-|_)[a-z0-9]+)*(\.([a-z]){2,4})$";

if (($email != "") && ereg($exp_reg_email, $email))
{
$expediteur = $prenom . " " . $nom . " <" . $email . ">";
}
else
{
echo("<h3>Le champ eMail est vide ou incorrect !</h3>");
echo '<a href="javascript:history.go(-1)">Retournez à la page précédente</a>';
$valide = false;
}

if($valide == true)
{
define("CRLF", "\r\n");
$destinataire = "Prénom Nom <webmaster@dom.com>";
$reponse = "Réponse <messagerie@dom.com>";
$sujet = "Envoi d'une image JPEG";

$fic = fopen($fichier, "r");
$piece_attachee = fread($fic, filesize($fichier));
$piece_attachee = chunk_split(base64_encode($piece_attachee));

fclose($fic);

$boundary = "-----=".md5(uniqid (rand()));

$entete = "To: " . $destinataire . CRLF;
$entete .= "From: " . $expediteur . CRLF;
$entete .= "Reply-To: " . $reponse . CRLF;
$entete .= "Date: " . date("r") . CRLF;
$entete .= "MIME-Version: 1.0" . CRLF;
$entete .= "Content-Type: multipart/mixed; boundary=" . $boundary . CRLF . CRLF;

$corps = "--$boundary" . CRLF;
$corps .= "Content-Type: text/plain; charset=\"iso-8859-1\"" .
CRLF;
$corps .= "Content-Transfer-Encoding:8bit" . CRLF;
$corps .= "Le fichier envoyé contient un fichier attaché..." . CRLF . CRLF;
$corps .= "--$boundary" . CRLF;
$corps .= "Content-Type: image/jpeg; name=" . $fichier . CRLF;
$corps .= "Content-Transfer-Encoding: base64" . CRLF;
$corps .= "Content-Disposition: inline; filename=" . $fichier . CRLF . CRLF;
$corps .= $piece_attachee . CRLF . CRLF;
$corps .=
"--$boundary--" . CRLF;

mail($destinataire, $sujet, $corps, $entete);

}
?>

 


15.Programmation Orientée Objet (POO)

La base de la programmation orientée objet est la classe.

La classe est un modèle contenant des variables (publiques ou privées dites propriétés) et des fonctions nommées méthodes.

A partir de cette classe vous allez créer des objets (une instance) chargée en mémoire qui, elle, pouvent contenir des données



<?php

class Producteur

{
    public $prcode;
    public $nom;
    public $email;

}

?>

puis

<?php

   $prod = new Producteur();

   $prod->nom = 'Château l\'Angelus';

   $prod->email = 'contact@langelus.com';


echo 'Producteur n° ' . $prod->prcode . $prod->nom;
?>
// notez l'appartenance se faisant par -> (en java, entre autre, on utilise le point)


Exemple avec une méthode (pour parler de l'objet en cours on utilise this )

<?php

class Producteur

{
    public $prcode;
    public $nom;
    public $email;


   public function formatNom()
   {
      return ucwords($this->nom);
    }

}

?>

puis

<?php

   $prod = new Producteur();

   $prod->nom = 'château l\'angelus';

   $prod->email = 'contact@langelus.com';


echo 'Producteur ' . $prod->formatNom()
?>


chaque élément peut être déclaré :

15.1.Constructeurs

Vous pouvez écrire un fonction nommée __construct qui sera lancée automatiquement à chaque instanciation.

(vous pourrez par exemple initialiser des variables ou vous connecter à la base de donnée)

<?php

class Producteur

{
    public $prcode;
    public $nom;
    public $email;


   public function __construct($code, $nom , $mail)
   {
      $this->prcode = $code;
      $this->nom = $nom;
      $this->email = $mail;

      
    }

}

?>

puis

<?php

   $prod = new Producteur(1, 'chateau montus', 'montus@madiran.fr');


   echo 'Producteur ' . $prod->nom . ' ' . $prod->email
?>

sur le même principe, vous pouvez écrire une fonction __destruct qui sera appelée quand l'objet sera détruit (fin de traitement ou fonction unset)

15.2.Héritage

Vous pouvez écrire une classe qui s'appuie sur une classe existante (pour l'enrichir ou restreindre l'usage de certaines méthodes)

Soit la classe suivante :

<?php
class Producteur
{
  public $prcode;
  public $nom;
  public $email;
  public $pwd;


public function changePwd($newpwd)
{
  $this->pwd = $newpwd;
  Echo 'mot de passe modifié';
}

}

 

si vous écrivez la classe ProducteurFR héritant de Producteur

<?php

class ProducteurFR extends Producteur
{
}

$prod = new ProducteurFR();

$prod->changePwd('coucou');


?>

elle hérite aussi des méthodes.

 

le but du jeu étant d'enrichir éventuellement la méthode,
pour cela nous allons réécrire la méthode, tout en appellant quand même la méthode parente par parent::changePwd()

 

<?php
class ProducteurFR extends Producteur
{
 public function changePwd($newpwd)
 {


   parent::changePwd($newpwd);
   $to = "cmasse@volubis.fr";
   $subject = "mot de passe";
   $body = "mot de passe modifié";

$headers = 'From: infos@@volubis.fr' . "\r\n". 'X-Mailer: PHP/' . phpversion();

if (mail($to, $subject, $body, $headers)) {
          echo("<p>Mail envoyé!</p>");
        } else {
          echo("<p>prb lors de l'envoi de mail.</p>");
       }
 }
}

$prod = new ProducteurFR();

$prod->changePwd('coucou');


?>

 

15.3.Méthodes statiques

Les méthodes et les propriétés sont par défaut non statiques, c.a.d que la valeur est propre à chaque instance

Si vous utilisez le contexte STATIC , l'information est alors commune à toutes les instances,
ce qui peut être pratique pour une classe de connexion à la base de donnée par exemple

 

<?php
class DB
{
 private static $conn = null;
 
 public static function getInstance()
 {
   if (self::$conn === null)
    
{
       self::$conn =   db2_connect("AS400", "PROFIL", "MOTDEPASSE");
     }
     return self::$conn;
  }
}

 

function f1()

{

   conn = DB::getInstance();

}

 

function f2()

{

   conn = DB::getInstance();

}


?>

 

Cela permet de réutiliser la même connexion .

 

vous remarquerez que dans un contexte statique on utilise self plutôt que $this et que l'opérateur est :: et non ->

 

15.4.Interfaces

Une interface est comme un modèle de classe, cela indique les méthodes à implémenter. Une interface ne peut pas être instanciée

 

<?php
interface achatVin_modele
{
 public function verifCepage();
 public function calculPrix();

}

 

class function achatVin implements achetVin_modele

{

  

}

 


?>

 

cela permet de renforcer les modèles de programmation mais aussi de faciliter la saisie,
les éditeurs proposant la liste des méthodes à écrire avec ctrl+espace.

 


19.Introduction à la Programmation Orientée Objet (POO)

La base de la programmation orientée objet est la classe.

La classe est un modèle contenant des variables (publiques ou privées dites propriétés) et des fonctions nommées méthodes.

A partir de cette classe vous allez créer des objets (une instance) chargée en mémoire qui, elle, pouvent contenir des données



<?php

class Producteur

{
    public $prcode;
    public $nom;
    public $email;

}

?>

puis

<?php

   $prod = new Producteur();

   $prod->nom = 'Château l\'Angelus';

   $prod->email = 'contact@langelus.com';


echo 'Producteur n° ' . $prod->prcode . $prod->nom;
?>
// notez l'appartenance se faisant par -> (en java, entre autre, on utilise le point)


Exemple avec une méthode (pour parler de l'objet en cours on utilise this )

<?php

class Producteur

{
    public $prcode;
    public $nom;
    public $email;


   public function formatNom()
   {
      return ucwords($this->nom);
    }

}

?>

puis

<?php

   $prod = new Producteur();

   $prod->nom = 'château l\'angelus';

   $prod->email = 'contact@langelus.com';


echo 'Producteur ' . $prod->formatNom()
?>


chaque élément peut être déclaré :

19.1.Contructeurs

Vous pouvez écrire un fonction nommée __construct qui sera lancée automatiquement à chaque instanciation.

(vous pourrez par exemple initialiser des variables ou vous connecter à la base de donnée)

<?php

class Producteur

{
    public $prcode;
    public $nom;
    public $email;


   public function __construct($code, $nom , $mail)
   {
      $this->prcode = $code;
      $this->nom = $nom;
      $this->email = $mail;

      
    }

}

?>

puis

<?php

   $prod = new Producteur(1, 'chateau montus', 'montus@madiran.fr');


   echo 'Producteur ' . $prod->nom . ' ' . $prod->email
?>

sur le même principe, vous pouvez écrire une fonction __destruct qui sera appellée quand l'objet sera détruit (fin de traitement ou fonction unset)

19.2.Héritage

Vous pouvez écrire une classe qui s'appuie sur une classe existante (pour l'enrichir ou restreindre l'usage de certaines méthodes)

Soit la classe suivante :

<?php
class Producteur
{
  public $prcode;
  public $nom;
  public $email;
  public $pwd;


public function changePwd($newpwd)
{
  $this->pwd = $newpwd;
  Echo 'mot de passe modifié';
}

}

 

si vous écrivez la classe ProducteurFR héritant de Producteur

<?php

class ProducteurFR extends Producteur
{
}

$prod = new ProducteurFR();

$prod->changePwd('coucou');


?>

elle hérite aussi des méthodes.

 

le but du jeu étant d'enrichir éventuellement la méthode,
pour cela nous allons réécrire la méthode, tout en appelant quand même la méthode parente par parent::changePwd()

 

<?php
class ProducteurFR extends Producteur
{
 public function changePwd($newpwd)
 {


   parent::changePwd($newpwd);
   $to = "cmasse@volubis.fr";
   $subject = "mot de passe";
   $body = "mot de passe modifié";

$headers = 'From: infos@@volubis.fr' . "\r\n". 'X-Mailer: PHP/' . phpversion();

if (mail($to, $subject, $body, $headers)) {
          echo("<p>Mail envoyé!</p>");
        } else {
          echo("<p>prb lors de l'envoi de mail.</p>");
       }
 }
}

$prod = new ProducteurFR();

$prod->changePwd('coucou');


?>

 

19.3.Méthodes statiques

Les méthodes et les propriétés sont par défaut non statiques, c.a.d que la valeur est propre à chaque instance

Si vous utilisez le contexte STATIC , l'information est alors commune à toutes les instances,
ce qui peut être pratique pour une classe de connexion à la base de donnée par exemple

 

<?php
class DB
{
 private static $conn = null;
 
 public static function getInstance()
 {
   if (self::$conn === null)
    
{
       self::$conn =   db2_connect("AS400", "PROFIL", "MOTDEPASSE");
     }
     return self::$conn;
  }
}

 

function f1()

{

   conn = DB::getInstance();

}

 

function f2()

{

   conn = DB::getInstance();

}


?>

 

Cela permet de réutiliser la même connexion .

 

vous remarquerez que dans un contexte statique on utilise self plutôt que $this et que l'opérateur est :: et non ->

 

19.4.Interfaces

Une interface est comme un modèle de classe, cela indique les méthodes à implémenter. Une interface ne peut pas être instanciée

 

<?php
interface achatVin_modele
{
 public function verifCepage();
 public function calculPrix();

}

 

class function achatVin implements achetVin_modele

{

  

}

 


?>

 

cela permet de renforcer les modèles de programmation mais aussi de faciliter la saisie,
les éditeurs proposant la liste des méthodes à écrire avec ctrl+espace.

 

 

BoTTom

 

©AF400