Introduction au PHP

PHP (officiellement, ce sigle est un acronyme récursif pour PHP Hypertext Preprocessor) est un langage de script généraliste et Open Source, spécialement conçu pour le développement d'applications web. Il peut être intégré facilement au HTML.

Installation :

Si vous êtes sur une distribution GNU/Linux, et que vous avez installé LAMP (Linux Apache MySQL PHP) alors comme son nom l'indique PHP est déjà installé sur votre machine.
Pour vérifier que l'interpréteur PHP est bien installé sur votre machine, exécutez la commande suivante dans un terminale.

php -v

Vous devriez avoir un résultat semblable au suivant ;

PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
 with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

Sinon vous pouvez toujours installer PHP depuis les dépôts génériques de votre distribution ( Exemple : sous Debian en tapant la commande suivante : )

sudo apt-get install php

Vérifiez bien que PHP est bien installé sur votre machine.

À priori cette installation permet par défaut de faire tourner PHP directement à partir d'Apache.

Test :

Rendez-vous dans le répertoire suivant /var/www/html/

Puis créez un fichier nommé helloworld.php et insérez ce code.

<?php

   echo "hello world" ;

?>

Enregistrez le fichier et ouvrez votre navigateur web puis tapez l'URL suivant http://localhost/helloworld.php

Vous devriez avoir à l'écran le texte suivant :

hello world

Si vous avez obtenu ce résultat alors PHP fonctionne sur votre machine.

Le code PHP

Le code PHP est écrit dans des fichiers en extensions .php et encapsulé entre les balises <?php et ?> tout ce qui se trouve en dehors de ces balises est reconnu par apache comme un simple texte et donc il est directement renvoyé.

Toute instruction en PHP doit finir par un point-virgule comme en C/C++.

Faites le test en écrivant dans le fichier helloworld.php le code suivant

<?php

?>

echo "hello world";

En rafraîchissant la page http://localhost/helloworld.php vous allez voir apparaître

echo "hello world"; 

et donc le code ne s'est pas exécuté, car il est en dehors de balises <?php et ?> de PHP.

Les commentaires

Les commentaires en PHP sont équivalents aux commentaires en C/C++, c'est-à-dire

<?php 

// Ceci est un commentaire sur une seule ligne 

/* 
Ceci est un commentaire 
sur plusieurs lignes
*/

?>

Les variables

Les variables en PHP sont dynamiquement typé donc vous n'avez pas a spécifier le type d'une variable car celui-ci est évaluer lors de l'exécution du code.

Les variables en PHP sont introduites par le symbole $ suivi (collé) par un identifiant (chaîne de caractère commençant obligatoirement par une lettre alphabétique et qui ne comporte que des caractères alpha-numérique et le symbole _ )

Voici un exemple de déclaration de variables en PHP :

<?php
$a = 'Hello';
$B = 'World';
$a_B = "$a $B";            // Contiens 'Hello World'
$_4site = 'pas encore';    // valide : commence par un souligné

$4site = 'pas encore';     // invalide : commence par un nombre

?>

Les variables prédéfinies

  • $_SERVER : est un tableau contenant des informations comme les en-têtes, dossiers et chemins du script. Les entrées de ce tableau sont créées par le serveur web.
  • $_GET : un tableau associatif des valeurs passées au script courant via les paramètres d'URL.
  • $_POST : un tableau associatif des valeurs passées au script courant via le protocole HTTP et la méthode POST
  • $_SESSION: un tableau associatif des valeurs stockées dans les sessions, et accessible au script courant.

Les constantes

Les constantes en PHP sont définies de deux manières différentes, soit avec la fonction define ou avec le mot-clé const, voici un exemple de définition de constantes en PHP

<?php
const PI = 3.14;             // Définie la constante PI = 3.14
define("ENV", "production");    // Définie la constante ENV = production
echo ENV;                       // affiche "production"
?>

La différence entre define et const est que la fonction define est utilisée pour définir des constantes qu'a l'extérieur des classes, contrairement au mot-clé const qui lui peut faire les deux.

Vous pouvez donc utiliser le mot-clé const sans avoir à vous soucier du contexte d'utilisation.
Les constantes magiques

  • __LINE__ : La ligne courante dans le fichier.
  • __FILE__: Le chemin complet et le nom du fichier courant avec les liens symboliques résolus. Si utilisé pour une inclusion, le nom du fichier inclus est retourné.
  • __FUNCTION__ :Le nom de la fonction.
  • __CLASS__ : Le nom de la classe courante. Le nom de la classe contient l'espace de nom dans lequel cette classe a été déclarée (i.e. Foo\Bar).
  • __METHOD__ : Le nom de la méthode courante.
  • __DIR__ :Le dossier du fichier. Si utilisé dans une inclusion, le dossier du fichier inclus sera retourné. C'est l'équivalent de dirname(__FILE__). Ce nom de dossier ne contiendra pas de slash final, sauf si c'est le dossier racine.

Les tableaux

Les tableaux en PHP sont des structures d'éléments composés d'une clé et d'une valeur, ils sont déclarés grâce à la fonction Array() ou avec les crochets et sont séparé par des virgules, pour associer une clé à une valeur, on utilise l'opérateur =>

Exemple de tableaux :

<?php
$tab_1 = Array(1,2,3,6,5,4,7,8,5); // crée le tableau qui contiens les éléments 1,2,3,6,5,4,7,8,5
$tab_2 = Array(); // crée un tableau vide
$tab_3 = [ 1, 2, 3, 4, 5 ]; // crée un tableau qui contiens les éléments : 1, 2, 3, 4, 5
?>

On peut créer des tableaux de tableaux comme suite

<?php
$tab_1 = Array(1,2,3,6,5,4,7,8,5); // crée le tableau qui contiens les éléments 1,2,3,6,5,4,7,8,5
$tab_2 = Array(); // crée un tableau vide
$tab_3 = [ 1, 2, 3, 4, 5 ]; // crée un tableau qui contiens les éléments : 1, 2, 3, 4, 5
$tab = Array("tab_1"=>$tab_1,"tab_2"=>$tab_2,"tab_3"=>$tab_3); 
// Crée un tableau qui associe a chaque clé le tableau associé
?>

Les fonctions

Pour définir une fonction en PHP, comme les variables, le typage des paramètres et de la valeur de retour est évalué à l'exécution donc pas besoin de spécifier un type en particulier.

L'avantage, c'est que vous pouvez à l'issue de différents cas d'exécution renvoyer un boolean ou un string et cela fonctionnera comme sur des roulettes

Voici un exemple de définition d'une fonction en PHP :

<?php
function getArrLength($arr){
          if(is_array($arr)){
               return count($arr);
          }else{
               return false;
          }
}
// Cette fonction renvoi la taille d'un tableau s'il est défini ou bien false si le tableau n'est pas défini

?>

Les boucles

For

<?php
const NB_IT = 50;
for( $i = 0 ; $i < NB_IT ; $i++){
       echo  $i  . "</br>";
}
?>

Foreach

<?php
$arr = Array('Nom'=>'Toto','Prénom'=>'Titi','Age'=>124);
foreach($arr as $key=>$value){
       echo $key  ." : " . $value . "</br>";
}
?>

While

<?php
$k = 0;
$loop = true;
while ( $loop == true){
   if($k > 5) {
         loop = false;
   }else{
      $k = $k +1;   }
}
?>

Les fichiers et dossiers

Pour gérer des fichier en PHP il existe un certain nombre de fonctions que je vais lister ci-dessous.

glob(string $pattern)

Cette fonction permet de rechercher les chemins qui vérifient le masque dans $pattern. Voici un exemple d'utilisation :

<?php
foreach (glob("*.txt") as $filename) {
    echo $filename . "</br>";
}
?>

is_dir(string $path)

Cette fonction permet de tester si le chemin $path est un répertoire ou pas. Elle renvoie true ou false

Voici un exemple d'utilisation :

<?php
$liste_fichiers = Array();
if(is_dir("./tmp/')){

      $liste_fichiers = glob("./tmp/*");

}
?>

mkdir(string name)

Cette fonction permet de créer un répertoire comme sous unix.

Voici un exemple d'utilisation

<?php

$liste_fichiers = Array();
if(is_dir("./tmp/')){
      $liste_fichiers = glob("./tmp/*");
}else{
      mkdir("./tmp");
}

?>

file_exists(string path)

Cette fonction permet de vérifier l'existence d'un fichier , elle renvoie true ou false

Voici un exemple d'utilisation :

<?php
if(file_exists("./tmp/into.log')){
    echo "j'ai trouvé le fichier";
}
?>

is_file(string path)

Cette fonction permet de vérifier que le chemin $path est bien un chemin valide vers un fichier valide.

Voici un exemple d'utilisation :

<?php
if(is_file("./tmp/into.log')){
    echo "./tmp/into.log est un fichier";
}
?>

file_put_contents(string contenu, string filename)

Cette fonction permet de mettre $contenu dans le fichier $filename, si jamais le fichier $filename n'existe pas alors il est créé automatiquement.

Voici un exemple d'utilisation

<?php

file_put_contents("ceci est un texte", "./tmp/info.log");

?>

Attention : si vous appelez file_put_contents("test", "./tmp/test.log") et que ./tmp/ n'existe pas, alors il y a une erreur.

file_get_contents(string filename)

Cette fonction récupère et renvoie le contenu du fichier $filename

Voici un exemple d'utilisation :

<?php
$content = file_get_contents("./tmp/info.log");
echo $content;
?>

copy(string src, string dst)

Cette fonction permet de copier le fichier depuis le chemin $src vers $dst

Voici un exemple d'utilisation :

<?php

copy("./tmp/info.log", "./tmp/info_backup.log");

?>

rename(string src, string dst)

Cette fonction permet de déplacer un fichier depuis le chemin $src vers $dst

Voici un exemple d'utilisation :

<?php

rename("./tmp/info.log", "./tmp/informations.log");

?>

unlink(string filename)

Cette fonction permet de supprimer le fichier $filename

Voici un exemple d'utilisation :

<?php

unlink("./tmp/info_backup.log");

?>

Les opérateurs

Arithmétiques :

-$aNégationOpposé de $a.
$a + $bAdditionSomme de $a et $b.
$a - $bSoustractionDifférence de $a et $b.
$a * $bMultiplicationProduit de $a et $b.
$a / $bDivisionQuotient de $a et $b.
$a % $bModuloReste de $a divisé par $b.
$a ** $bExponentielleRésultat de l'élévation de $a à la puissance $b.

Binaires:

$a & $bAnd (Et)Les bits positionnés à 1 dans $a ET dans $b sont positionnés à 1.
$a | $bOr (Ou)Les bits positionnés à 1 dans $a OU $b sont positionnés à 1.
$a ^ $bXor (ou exclusif)Les bits positionnés à 1 dans $a OU dans $b mais pas dans les deux sont positionnés à 1
~ $aNot (Non)Les bits qui sont positionnés à 1 dans $a sont positionnés à 0, et vice-versa.
$a << $bDécalage à gaucheDécale les bits de $a, $b fois sur la gauche (chaque décalage équivaut à une multiplication par 2).
$a >> $bDécalage à droiteDécalage les bits de $a, $b fois par la droite (chaque décalage équivaut à une division par 2).

Comparaisons :

$a == $bEgalTRUE si $a est égal à $b après le transtypage.
$a === $bIdentiqueTRUE si $a est égal à $b et qu'ils sont de même type.
$a != $bDifférentTRUE si $a est différent de $b après le transtypage.
$a <> $bDifférentTRUE si $a est différent de $b après le transtypage.
$a !== $bDifférentTRUE si $a est différent de $b ou bien s'ils ne sont pas du même type.
$a < $bPlus petit queTRUE si $a est strictement plus petit que $b.
$a > $bPlus grandTRUE si $a est strictement plus grand que $b.
$a <= $bInférieur ou égalTRUE si $a est plus petit ou égal à $b.
$a >= $bSupérieur ou égalTRUE si $a est plus grand ou égal à $b.
$a <=> $bOpérateur combinéUn entier inférieur, égal ou supérieur à zéro lorsque $a est respectivement inférieur, égal, ou supérieur à $b. Disponible depuis PHP 7.

JSON

JavaScript Object Notation (JSON) est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Il permet de représenter de l'information structurée comme le permet XML par exemple

En PHP, il existe deux fonctions pour transformer un tableau en texte JSON ou bien de transformer un texte JSON en tableau PHP

json_encode()

Exemple :

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
// affiche : {"a":1,"b":2,"c":3,"d":4,"e":5}
?>

json_decode()

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json, true));

/*
affiche : 
array(5) {
 ["a"] => int(1)
 ["b"] => int(2)
 ["c"] => int(3)
 ["d"] => int(4)
 ["e"] => int(5)
}
*/

?>

La programmation modulaire

Les Classes

Je ne vais pas détailler ce qu'une classe dans cet article, le concept de la programmation modulaire sera expliqué dans un autre article.

Je me contenterai de donner la syntaxe de création de classe en PHP

<?php

class MyClass extends MyOtherClass{

     private $title; // String : Titre de la page
     private $content // string : Le contenu d'une page
     private $author; // string : L'auteur d'une page

     function __construct(){
        $this->initAuthor();

     }

     function __destructor(){

     }

     private function initAuthor($_author){
        $this->author = $_SESSION["USER_ID"];
     }

     protected function getAuthor(){
        return $this->author;
     }

     public function setContent($_content){
        $this->content = $_content;
     }

     public function getContent(){
       return $this->content;
     }
     public function setTitle($_tite){
       $this->tite = $_tite;
     }

     public function getTitle(){
        return $this->Title;
      }

}
?>

L'encapsulation

La classe elle-mêmeLes sous-classesTout le monde
privateOUINONNON
publicOUIOUIOUI
protectedOUIOUINON

La bibliothèque PDO

PDO est une bibliothèque qui permet la connexion entre PHP et un serveur de base de données (potentiellement un serveur MySQL)

Le constructeur de cette classe prend grossièrement en paramètres : un pilote, le nom d'une base de données, un nom d'utilisateur et son mot de passe

Voici un exemple d'utilisation :

<?php
/* Connexion à une base ODBC avec l'invocation de pilote */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connexion échouée : ' . $e->getMessage();
}
?>

On utilise PDO::exec() pour exécuter une requête SQL dans un appel d'une seule fonction. Cette fonction retourne le nombre de lignes affectées par la requête.

Notez bien que cette fonction ne renvoie des n-upplets en cas requête SELECT pour cela, il faut utiliser la fonction PDO::query()

PDO::query() : retourne un objet PDOStatement ( qui est grossièrement une structure qui contient tout le n-upplets du résultat de la requête) , ou FALSE si une erreur survient.

Voici un exemple d'utilisation:

<?php
function getPages($conn) {
    $sql =  'SELECT * FROM Pages ORDER BY title';
    foreach  ($conn->query($sql) as $row) {
        echo $row['title'] . "\t";
        echo $row['date'] . "\t";
        echo $row['author'] . "</br>";
  }
}
?>

PDO::prepare() Prépare une requête SQL à être exécutée par la méthode PDOStatement::execute(). La requête SQL peut contenir zéro ou plusieurs noms (:nom) ou marqueurs (?) pour lesquels les valeurs réelles seront substituées lorsque la requête sera exécutée.

Voici un exemple d'utilisation :

<?php
$sql = 'SELECT *
    FROM Pages
WHERE id < :id_inf AND id > :id_sup';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':id_inf' => 15, ':id_sup' => 90));
$red = $sth->fetchAll();
?>

Crédits : cet article est principalement basé sur la documentation officielle de PHP disponible sur l'adresse http://php.net/manual/fr

119
5.0(0 votes)