Skip to content

Initiation au PHP5

HyperText Preprocessor

C’est un langage de script HTML dont la syntaxe est emprunté au C, au Java et au PERL.

Les Tags

<?php ?> : La balise conseillée par PHP

<? ?> : Short tag, à éviter

<?= ?> : Revient à faire un echo

<% %> : ASP Tag

<script language= »PHP »></script>

Les shorts open tags peuvent etre désactivés dans le php.ini :

short_open_tag = Off

De même pour les ASP tags :

asp_tags = Off

On evite ces deux derniers car peuvent avoir un probleme d’interpretation avec du xml. Ils ne sont pas standards W3C malgré qu’ils soient toujours actifs

Important aussi :

on peut fermer une balise <?php par %> par exemple

on peut ne pas fermer la balise php si et seulement si on n’est pas dans du HTML. PHP recommande de ne pas fermer la balise : pour eviter d’introduire des caracteres avant un include qui peut etre interprété comme un entete vide.

Les elements qui consituent un script

Les instructions

Les instructions simples sont toujours terminés par un « ; » sauf pour la derniere ligne de code parceque la balise de fermeture introduit automatiquement une fin

Les instructions composées sont composées d’instructions simples mais mise entre {}

	<?php
		echo 'Bonjour';
		{
			echo 'Instruction 1<br/>';
			echo 'Instruction 2';
		}
	?>

NB : oublier un « ; » sera interprété comme une erreur par PHP

Expressions

Expression : Toute chôse ayant une valeur. (constante, 1+1, variable, etc)

Les espaces

On peut ommetre les espaces en PHP, sous certaines conditions.

Commentaires

 /*
	plusieurs lignes
 */
 
 //Une ligne
 
 #Une ligne

 #! /bin/

Attention, sous UNIX, on peut faire un #! qui permet de faire appel à un executable externe.

On peut imbriquer des commentaires. Il existe une syntaxe de comentaires qui permet de générer une documentation technique : PhpDoc.

	/**
	* Projet A
	* @author M. X.
	* @version 1.0
	*/

http://www.phpdoc.org

Les types de données

En php, toute valeur à un type. PHP utilise un type typage dynamique: il n’est pas nécéssaire de préciser le type.

Les types sont définis par familles :

  • Les types scalaires :
    • entiers (12, 014, 0xC)
      	<?php
      		echo $a=12;
      		echo '<br/>';
      		echo $b=014;
      		echo '<br/>';
      		echo $c=0xc;
      	?>
      

      affichera 12 12 12

      Attention : pour la certification, il faut connaitre l’octale et l’héxadécimal.

    • reels (1.5, 15E2 => 15E+2, 15E-2) (E étant la puissance)
    • booleen (0,1,true,false)
    • chaines

      une chaine permet de contenir une suite d’octet quelconque : en php, un caractere est un octet. Il existe plusieurs syntaxe pour créer une chaine de caractere :

      • simple quote (caractere d’echapement : ,\)
        	<?php
        		echo 'C\'est un test';
        	?>
      • double quote (caractere d’echapement : ,\ & caractere de subtitution : n)
        Escaped characters

        sequence meaning
        n linefeed (LF or 0x0A (10) in ASCII)
        r carriage return (CR or 0x0D (13) in ASCII)
        t horizontal tab (HT or 0×09 (9) in ASCII)
        v vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
        f form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
        \ backslash
        $ dollar sign
         » double-quote
        [0-7]{1,3} the sequence of characters matching the regular
        expression is a character in octal notation
        x[0-9A-Fa-f]{1,2} the sequence of characters matching the regular
        expression is a character in hexadecimal notation

        Dans une chaine « double quote », il est possible de faire référence à une variable :

        	$a = 10;
        	echo "a vaut : $a";
        	echo "Il vous reste \"{$a}minutes\"";
        	echo "051"; //affichera : 051
        	echo "\051"; //affichera ) => on est en hexa, on echappe la chaine

        heredoc : on utilise un token (separateur)

        	$a = <<<monToken
        		Ligne1
        		Ligne2
        		Ligne3
        	MonToken;
        	echo $a;
    • Les types composés
      • Tableaux : un tableau peut contenir plusieurs valeures accessibles a l’aide d’une clé.
        	$tab = array(12,13,'B');
        	echo $tab[1]; //affichera 13;
      • Classes :
        	class maclasse {
        		public $var1;
        		protected $var2;
        		private $var3;
         
        		public function mamethode() {
         
        		}
        	}
        	$monobjet = new maclasse();
    • Les types spéciaux
      • Les ressources : ce sont des extensions qui vont gérér les ressources (ex: gestion des images par php_gd2.dll)
      • Le NULL est une absence de valeur. Une variable, constante est considérée comme nulle si et seulement si elle assignée à NULL et quand la variable/constante à été détruite.
        $a = NULL;
        unset($a);

    Conversion de types

    En PHP, la conversion peut être implicite. Ou explicite : le développeur demande la conversion.

    	$a = 12+"12";
    	$a = 12+(int)"12";
    Syntaxe Description
    (int) convertit la valeur en entier
    (float) convertit la valeur en reel
    (bool) converti la valeur en booleeen
    (string) convertit la valeur en chaine
    (array) convertit la valeur en tableau
    (object) convertit la valeur en objet d’instance stdClass
    	$a = (int) 5.2*12.4; // float(62)
    	$b = (int) 'Bonjour 027'; // int(0)
    	$c = (array) '12'; // array(1) {  [0]=>  string(2) "12"}
    	$d = (string) 124; // string(3) "124"
    	$e = (int) '007 bonjour'; // int(7)
    	$f = (float) '007 bonjour'; // float(7)
    	$g = (object) 5.2; // object(stdClass)#1 (1) {  ["scalar"]=>  float(5.2)}

    Exemples

    Valeur Type Resultat
    [0] (int)
    int(0)
    [0] (float)
    float(0)
    [0] (array)
    array(1) {
      [0]=>
      int(0)
    }
    
    [0] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      int(0)
    }
    
    [0] (bool)
    bool(false)
    
    [0] (string)
    string(1) "0"
    


    Valeur Type Resultat
    [1] (int)
    int(1)
    
    [1] (float)
    float(1)
    
    [1] (array)
    array(1) {
      [0]=>
      int(1)
    }
    
    [1] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      int(1)
    }
    
    [1] (bool)
    bool(true)
    
    [1] (string)
    string(1) "1"
    


    Valeur Type Resultat
    [0] (int)
    int(0)
    
    [0] (float)
    float(0)
    
    [0] (array)
    array(1) {
      [0]=>
      string(1) "0"
    }
    
    [0] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      string(1) "0"
    }
    
    [0] (bool)
    bool(false)
    
    [0] (string)
    string(1) "0"
    


    Valeur Type Resultat
    [0.0] Attention (int)
    int(0)
    
    [0.0] (float)
    float(0)
    
    [0.0] (array)
    array(1) {
      [0]=>
      string(3) "0.0"
    }
    
    [0.0] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      string(3) "0.0"
    }
    
    [0.0] (bool)
    bool(true)
    
    [0.0] (string)
    string(3) "0.0"
    


    Valeur Type Resultat
    [] (int)
    int(0)
    
    [] (float)
    float(0)
    
    [] (array)
    array(1) {
      [0]=>
      string(0) ""
    }
    
    [] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      string(0) ""
    }
    
    [] (bool)
    bool(false)
    
    [] (string)
    string(0) ""
    


    Valeur Type Resultat
    [true] (int)
    int(0)
    
    [true] (float)
    float(0)
    
    [true] (array)
    array(1) {
      [0]=>
      string(4) "true"
    }
    
    [true] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      string(4) "true"
    }
    
    [true] (bool)
    bool(true)
    
    [true] (string)
    string(4) "true"
    


    Valeur Type Resultat
    [false] (int)
    int(0)
    
    [false] (float)
    float(0)
    
    [false] (array)
    array(1) {
      [0]=>
      string(5) "false"
    }
    
    [false] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      string(5) "false"
    }
    
    [false] (bool)
    bool(true)
    
    [false] (string)
    string(5) "false"
    


    Valeur Type Resultat
    [les 3 mousquetaires] (int)
    int(0)
    
    [les 3 mousquetaires] (float)
    float(0)
    
    [les 3 mousquetaires] (array)
    array(1) {
      [0]=>
      string(19) "les 3 mousquetaires"
    }
    
    [les 3 mousquetaires] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      string(19) "les 3 mousquetaires"
    }
    
    [les 3 mousquetaires] (bool)
    bool(true)
    
    [les 3 mousquetaires] (string)
    string(19) "les 3 mousquetaires"
    


    Valeur Type Resultat
    [12,24] (int)
    int(12)
    
    [12,24] (float)
    float(12)
    
    [12,24] (array)
    array(1) {
      [0]=>
      string(5) "12,24"
    }
    
    [12,24] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      string(5) "12,24"
    }
    
    [12,24] (bool)
    bool(true)
    
    [12,24] (string)
    string(5) "12,24"
    


    Valeur Type Resultat
    [] (int)
    int(0)
    
    [] (float)
    float(0)
    
    [] (array)
    array(0) {
    }
    
    [] (object)
    object(stdClass)#1 (0) {
    }
    
    [] (bool)
    bool(false)
    
    [] (string)
    string(0) ""
    


    Valeur Type Resultat
    [12.7] (int)
    int(12)
    
    [12.7] (float)
    float(12.7)
    
    [12.7] (array)
    array(1) {
      [0]=>
      float(12.7)
    }
    
    [12.7] (object)
    object(stdClass)#1 (1) {
      ["scalar"]=>
      float(12.7)
    }
    
    [12.7] (bool)
    bool(true)
    
    [12.7] (string)
    string(4) "12.7"
    

    Conclusion :

    Pour la conversion d’un entier en booleen, 0 donne false, et pour tout les autres entiers on obtient true.

    Pour la conversion d’un float en entier, on a une simple concatenation : 12.24 devient 12.

    Pour la conversion d’un booleen false en chaine, se converti en «  » et pour un booleen true, on obtient « 1″.

    Pour la conversion d’un booleen il n’a que les chaines 0 et vides qui sont considérés en tant que false.

    Pour la conversion d’une chaine en float ou en entier, si les chiffres dans une chaine sont au début, php transforme cette chaine en nombre. Sinon, on obtient 0.

    Variables et Constantes

    En constante et en variable, il existe des mots clés qui ne peuvent pas etre utilisés par le developpeur comme par exemple : E_ALL

    On appele identifiant les variables et constantes. Ces identifiants sont soumis aux contraintes suivantes :

    • On ne commence jamais une constante ou variable par un chiffre : [a-z_]. Les caracteres suivant peuvent etre [a-z0-9_]*
    • Les variables et les constantes sont sensibles a la casse.

    Les variables

    Une variable commence toujours par le signe $. Il n’est pas obligé de déclaré une variable avant utilisation

    Il est possible d’utiliser des variables variable

    	$a= 'b';
    	$b = 'c'
    	$c ='Hello';
    	$Hello = 'Bonjour';
    	echo $$$$a; //affichera Bonjour => il faut lire de droite a gauche : $a vaut b qui vaut c qui vaut Hello qui vaut 'Bonjour'

    Il est possible de déclarer une variable avec des {}

    	${'78abc15'} = 5;
    	echo ${78abc15} = 5; //Utilisé pour créer des variables dynamique

    Les constantes

    Pour assigner une constante, on emploie le mot cle define(‘CONSTANTE’,'Valeur’,'SENSIBILITIE_CASE’) où SENSIBILITIE_CASE est par defaut à true.

    	define('TVA',19.6,1);
    	echo tva;
    	define ('TR',39.9);
    	echo TR;

    Attention : on peut assigner à une constante, uniquement les valeurs scalaires.

    Une constante non définie vaut sont propre nom

    En PHP, il existe des constantes dites « constantes magiques » qui sont propres à PHP

    Constante magique Description
    __FILE__ Le fichier dans lequel onse trouve
    __LINE__ Ligne dans laquelle on se trouve
    __FUNCTION__ Fonction dans laquelle on se trouve
    __CLASS__ La classe dans laquelle on se trouve
    __METHOD__ Methode dans laquelle on se trouve

    Il faut eviter les « nombres magiques », il faut les remplacer par des constantes :

    	$a = 15 * $b ;
    	//doit etre remplacer par
    	$a = $CONSTANTE * $b;

    Les opérateurs

    Le fonctionnement des opérateurs dépend de leur priorité.

    • Les + et – : l’ordre est de gauche à droite ( 5 + 3 – 2 )
    • Les = : l’ordre est de droite à gauche ( $a = $b = 5; )
    • Les opérateurs arithmetiques :
      Opérations élémentaires

      Exemple Nom Résultat
      -$a Négation Opposé de $a.
      $a + $b Addition Somme de $a et $b.
      $a – $b Soustraction Différence de $a et $b.
      $a * $b Multiplication Produit de $a et $b.
      $a / $b Division Quotient de $a et $b.
      $a % $b Modulo Reste de $a divisé par $b.
    • Opérateurs d’affectation (=,+=,-=,*=,/=,%=)
      	$a = 22; // a = 22
      	$a +=5; // a = 27;
      	$a -= 5; // a = 22
      	$a *=5; // a = 110
      	$a /= 5; //a = 22
      	$a %= 5; // a = 2
      	echo $a;

      Une affectation se fait soit par copie soit par référence. Sauf pour les classes et les ressources en PHP5.

      	$a = 5;
      	$b = $a;
      	$a = 7;
      	echo $b; //affiche 5

      La modification de a n’influe pas sur b.

      	$a = 5;
      	$b = &$a;
      	$a = 7;
      	echo $b; //affiche 7

      Création d’un alias de a sur b.

      En PHP4, alors que les objets et ressources sont affectés par copie, en PHP5 ils le sont par référence.

    • Les opérateurs bit à bit (bitwise) permettent de travailler sur la représentation binaire d’une valeur.
      Les opérateurs sur les bits

      Exemple Nom Résultat
      $a & $b ET (And) Les bits positionnés à 1 dans $a ET dans
      $b sont positionnés à 1.
      $a | $b OU (Or) Les bits positionnés à 1 dans $a OU $b

      sont positionnés à 1.

      $a ^ $b Xor Les bits positionnés à 1 dans $a OU dans
      $b mais pas dans les deux sont positionnés à 1.
      ~ $a NON (Not) Les bits qui sont positionnés à 1 dans $a

      sont positionnés à 0, et vice versa.

      $a << $b Décalage à gauche

      Décale les bits de $a, $b fois
      sur la gauche (chaque décalage équivaut à une multiplication par 2).

      $a >> $b Décalage à droite Décalage des bits de $a, $b fois
      par la droite (chaque décalage équivaut à une division par 2).

      Rappels :

      & 0 1
      0 0 0
      1 0 1
      | 0 1
      0 0 1
      1 1 1
      ^ 0 1
      0 0 1
      1 1 0
      	$a = 13; //=> 1101
      	$b = 7; //=> 0111
      	$res = $a & $b = 1101 & 0111 = 0101;
      	$res = &a | $b = 1101 | 0111 = 1111;
      	$res = &a ^ $b = 1101 | 0111 = 1010;
      	$res = ~$a = 0010
      	$res = $a >> $b = $a / 2E$b;
      	$res = $a << $b = $a * 2E$b;
      	5 << 2 = 101 * 2E2 = 101 * 100 = 10100 = 20;
      	5 >> 2 = 101 / 2E2 = 101 / 100 = 1;

      Utilisation : cf. PHP.ini :

      Show only errors

      error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR

      Show all errors, except for notices

      error_reporting = E_ALL & ~E_NOTICE | E_STRICT

    Exercice : créer une variable entiere contenant une date avec le format suivant :

    31 jours 12 mois 1999

    Realiser 2 fonctions :

    • Retourner un entier contenant une date au format compacte (binaire) param : annee, mois, jour, nom : creerdate
    • Retourne une chaine contenant la date sous forme YYYY-MM-DD
    define('BITS_ANNEE',9);
    define('BITS_MOIS',5);
    define('MASQUE_MOIS',480);
    define('MASQUE_JOUR',31);
    function creerDate($iAnnee,$iMois,$iJour){
    	return ($iJour | ($iMois << BITS_MOIS) | ($iAnnee << BITS_ANNEE));
    }
    function str2date($iDate) {
    	$iAnnee = $iDate >> BITS_ANNEE;
    	$iMois = ($iDate & MASQUE_MOIS) >> BITS_MOIS ;
    	$iJour = $iDate & MASQUE_JOUR;
    	return sprintf('%d-%02d-%02d',$iAnnee,$iMois,$iJour);
    }
    $date = creerDate(1999,12,31);
    echo str2date($date);
    Le liens de référence :

    http://www.php.net