PHP, un langage pour construire des pages Web sur le serveur
On est quelquefois partagé sur la façon d'optimiser le langage pour accélérer son fonctionnement, et Facebook a même opté pour une approche radicale en créant un compilateur et une machine virtuelle.
Mais ce langage est devenu universel coté serveur. PHP est le P dans l'architecture populaire LAMP qui inclut le système
d'exploitation Linux, le serveur Apache et la base de données MySQL.
Un script PHP produit des pages HTML, et peut être imbriqué à l'intérieur de code HTML, comme JavaScript mais est interprété sur le serveur. L'interpréteur peut aussi fonctionner sur le poste local.
Le langage a été conçu en 1993 par Rasmus Lerdorf parce qu'il avait besoin lui-même d'un outil gratuit pour programmer des pages Web et le il distribue en source libre sous le nom PHP/FI, Personal Home Pages/Form Interpreter.
"Je n'avais jamais pensé en écrivant PHP qu'un jour des millions de personnes regarderaient mon code par dessus mon épaule. Si j'avais imaginé cela, j'aurais sûrement fait certaines choses différemment."
Rasmus Lerdorf, 2012.
Après avoir travaillé chez Yahoo!, Rasmus Lerdorf a été employé par WePay puis Etsy.
Il développera ensuite PHP avec l'aide de plusieurs
programmeurs qui écrivent un nouveau moteur pour PHP 3 et lui donnent
le nom de PHP Hypertext Processor en 1997. Les acronymes récursifs sont à la mode, avec des noms tels que GNU is Not Unix, PNG is Not GIF, etc...
En 1999 le moteur Zend est créé
pour PHP 4.
PHP 5 est apparu en 2004, il est orienté objets et supporte
XML. La vitesse d'exécution a été doublée en passant de PHP 5.3 à PHP 5.6.
PHP 7 est apparu le 3 décembre 2015. Il n'y pas de PHP 6 après le projet avorté qui a vu une partie de ses apports transférés à PHP 5.
Description du langage
PHP reprend la syntaxe de C et des idées du shell d'Unix.
- Syntaxe de C, moins les variables typées, plus:
- Variables dynamiques préfixées par $.
- Orienté objets.
- Tableaux associatifs (tableaux à clés de recherche).
- Le construct foreach pour scanner les tableaux.
- Interpolation de chaîne: on peut placer des variables dans les chaînes de caractères.
- Dispose d'une quantité étendue de fonctions dediées au Web et aux bases de données.
Syntaxe
- Le langage n'est pas sensible à la casse.
- Les variables sont préfixée par le symbole $ et aucun type n'est spécifié.
- Les chaînes litérales comprises entre "" sont évaluées pour les code spéciaux et les variables, entre ' ' elles ne le sont pas.
- <?php et ?> doivent enclore un programme PHP.
- # ou // démarrent un commentaire.
- array( "1" =>" "a, ...) est un dictionaire.
- const est ajouté dans PHP 5.6.
Structures de contrôle
La structure if dispose des options elsif et else.
if(x < 10) {
echo "$x inférieur à 10\n";
}
elseif(x > 10) {
echo "$x supérieur à 10\n";
}
else {
echo 'etc...\n'
}
La structure while:
while(expr) {
...
}
Fonction ou méthode
La définition d'une fonction commence par le mot-clé function, suivi
du nom et la liste des arguments séparé par des virgules,
et le corps est enclos entre { et }.
Le mot-clé return dans le corps de la définition permet
de retourner une valeur.
function nomfonc( arguments ) {
...instructions...
return(x);
}
Classe
class nom {
...
}
Le corps est similaire au code global.
Chaîne de caractères
Exemple: afficher les lettres d'un texte.
$str = "demo";
$len = strlen($str);
for($i = 0; $i < $len; $i++) {
echo $str[$i];
}
Tableau
Déclarer, fusionner, prendre un sous-ensemble, afficher les éléments.
$arr = array(1,2,3 );
$arr = array_merge($arr, array( 4,5));
$sub = array_slice(|$arr, 1,3);
foreach($sub $as $num) {
echo $num;
}
Doit afficher 234.
Serveur local intégré
Pour fonctionner localement, et notamment pour la mise au point du code, il faut installer un serveur et ensuite exécuter le script avec le préfixe http://localhost.
Depuis la version 5.4, cela devient superflu car un serveur local est inclut dans la distribution. On lance le serveur avec cette commande:
php -S localhost:1100
Où 1100 est le numéro du port (c'est un exemple). Pour lancer le script index.php, et afficher le résultat dans un navigateur, taper dans la barre d'URL:
localhost:1100
L'avantage par rapport aux solutions comme Wamp est qu'il n'est pas nécessaire de transférer les fichiers dans un sous-répertoire de Wamp, le répertoire www en l'occurence. Les scripts et pages PHP fonctionnent là où ils se trouvent.
Pourquoi utiliser PHP? L'expérience utilisateur
PHP est un outil Internet fonctionnant sur le serveur pour exécuter
des scripts, ou créer ou modifier des pages Web dans lesquels il
est inclus.
Il convient pour traiter des données importantes coté serveur,
et construire des pages HTML affichant les résultats (JavaScript
convient pour modifier dynamiquement les pages coté navigateur).
PHP 5 est un concurrent à Java en plus simple, comme serveur d'application
et constitue une plateforme pour les applications et services Web.
C'est le langage le plus utilisé pour réaliser des CMS,
les systèmes de gestion de contenu.
Le langage a été développé au jour le jour, pour ajouter les fonctions dont on avait besoin, sans plan bien défini. En conséquence il manque de consistence, de règles bien définies, et on doit se référer constamment au manuel pour retrouver notamment les paramètres d'une fonction.
Par exemple la fonction substr_replace à pour arguments la chaîne de départ suivie de la partie à remplacer et la chaîne de remplacement, alors que la fonction str_replace a pour arguments la partie à remplacer et la chaîne de remplacement suivies de la chaîne de départ.
Le fait qu'un tableau soit aussi un dictionnaire, donc que les indices soit des clés, est une source de maux de têtes pour les programmeurs.
Il y a en fait de nombreuses alternatives, Python, Ruby, Node, Go, et plus récemment, Julia.
PHP 6 (en fait PHP 5.x)
Le projet PHP 6 qui devait utiliser le format d'encodage Unicode a été abandonné. Mais certaines fonctions prévues dans le projet sont ou seront incorporées dans PHP 5.
- Les espaces de noms.
- Générateurs et coroutines (PHP 5.5).
- XMLReader. Pour lire des fichiers XML en mode Sax progressif.
- XMLWriter.
- goto, la directive du langage Basic réapparaît.
- Fonctions lambda ou closures (sans nom).
- Extension filefinfo, pour le système de fichier.
- Phar. Permet de placer une application PHP dans un seul fichier exécutable, comme on le fait en Java avec les .jar.
- Intl. Internationalisation.
- Les opérateurs continue et break ne pourront fonctionner qu'avec des constantes ou sans paramètre.
- La fonction ereg() pour les expressions régulières sera supprimée. Il faudra la remplacer par preg_match() dont le format est différent mais plus généralement utilisé.
- La compatibilité avec d'anciens formats comme GD 1 et Freetype 1 sera supprimée.
- Magic_quotes, une propriété très décriée car source de failles de sécurité ne sera plus supporté.
- Il en est de même pour register_global, safe_mode et register_long_arrays.
Il faudra donc modifier les applications présentes pour les rendre compatibles. - Les balises <?php ?>, sont les seules reconnues.
- dl() pour charger une librairie dynamique est désactivé depuis 5.3.
- Array_column retourne une colone dans un tableau multi-dim.
Le support de Windows XP s'arrête avec la version 5.5.
En 2008, le CEO de Zend, déclarait ceci dans une interview:
Donc nous prévoyons une cycle de déploiement à long terme pour PHP 6 et nous ne voulons pas suivre le même chemin que le project Perl, avec des contributeur travaillant toujours sur Perl 6 six ans après. Les gens se moquent de Microsoft mais regardez Perl 6.
En 2015, PHP 6 n'existe toujours pas, et on a préféré passer directement à PHP 7. A vrai dire, Perl 6 n'est toujours pas achevé non plus!
PHP 7
Nommée auparavant PHP Next Generation (PHPNG), cette nouvelle version succède à PHP 5 (il n'y aura jamais de PHP 6), et veut d'une part accélérer les performances avec un interpréteur JIT comme le fait HHVM, d'autre part rendre la syntaxe plus consistance. Le gain en performance est de 100% en moyenne par rapport à 5.6.
La programmation asynchrone permet des traitements en parallèle.
- Le langage supporte les types pour les arguments et le retour d'une fonction.
function mult(float $a, float $b) : float { return $a * $b; }
- L'opérateur <=> est ajouté (Spaceship operator). Il retourne 0 en cas d'égalité des deux valeurs comparées, 1 si la première est supérieure à la seconde, et -1 dans le cas inverse.
- Générateur, avec le mot clé yield.
- Tableau de constantes, sorte d'enum indicé.
- Clôtures (voir dictionnaire).
- Fonction unserialize() avec filtres, pour la sécurité.
- Unicode.
- Une liste de nouveaux mots réservés: bool, int, float, string, numeric, NULL, TRUE, FALSE, resource, object, mixed.
- La structure list() ne respecte pas toujours le même ordre pour assigner les variables.
Faut-il passer un site à PHP 7? Cela permet de meilleurs performances et une économie de mémoire, donc c'est certainement recommandé. Cependant, on doit s'assurer que qu'il n'y a aucune incompatibilité dans le mesure ou un ensemble de fonctions obsolètes mais toujours actives se trouve maintenant supprimé. Par exemple les fonctions mysql.
Optimiser PHP: Google vs. L'équipe de PHP
Les techniciens de Google donnent des conseils aux Webmasters pour optimiser le code des pages et des scripts.
Un de ces articles concerne PHP et indique en plusieurs points comment modifier le code, remplacer des structures de contrôle, pour l'optimiser au mieux.
Mais du coté des créateurs du language, on s'insurge et on conteste cette analyse. Cette polémique est intéressante pour les webmasters qui utilisent le PHP sur leur site, car elle fournit des précisions utile sur l'optimisation du code.
-
Copier des variables ou non?
En fait PHP optimise l'assignation et la valeur des variables n'est physiquement copiée que quand elle change. -
Guillemets simples ou doubles?
Celà ne fait pas de différence. Même s'il y a des variables à interpréter dans les chaînes entre double guillemets, ce n'est pas plus long qu'en concaténant des variables et des bouts de chaînes. -
Echo ou print?
La vitesse d'exécution est similaire mais dans certains cas, cela peut dépendre de la configuration du serveur.
(La question de la vitesse, précisons le, est utile quand on génère des pages à partir de commandes en PHP.) -
Switch/case ou if/else?
Là encore, utiliser l'un ou l'autre ne fait pas de différence car le code interne est le même.
Le seul point sur lequel les deux parties sont d'accord, c'est qu'il vaut mieux migrer vers la dernière version de PHP, car c'est toujours la plus rapide.
HHVM
HHVM (Hip Hop Virtual Machine) est un compilateur JIT créé et utilisé par Facebook, disponible sur GitHub avec le code source. Fonctionnant avec la machine virtuelle HHVM, PHP devient deux plus rapide qu'avec l'interpréteur de Zend. HHVM a remplacé PHP 5.3 chez Wikipedia aussi (ils se préparent à migrer vers PHP 7 maintenant).
Les comparaisons avec PHP 7 ont montré que HHVM est légèrement plus rapide pour le code antérieur, mais quand le code tire parti des nouveautés du langage, c'est l'interpréteur PHP 7 qui l'emporte.
Pour une analyse de son fonctionnement, un article détaillé: LLVM code generation in HHVM. LLVM est maintenant le backend final dans une chaîne de représentations intermédiaires.
PHP est compilé en bytecode HHVM, puis dans une seconde représentation intermédiaire. Il est ensuite traduit en langage d'assemblage qui peut être converti en bitcode LLVM.
La machine virtuelle fonctionne avec le langage Hack qui s'est substitué à PHP et est devenu incompatible avec lui en 2018. Il peut être remplacé par PHP 7 sans perte de performance.
Outils et tutoriels
Editeurs et IDE gratuits
La plupart des éditeurs de codes disposent de coloration syntaxique et auto-correction pour PHP, Visual Studio Code par example. Certains IDE proposent des outils supplémentaires.
- NetBeans
IDE de Sun en Java pour PHP et autres langages. NetBeans tire profit du serveur intégré à PHP, à condition que l'on configure l'exécution dans les propriétés du projet pour fonctionner ainsi. On pourra alors démarrer le script en cours à partir de l'éditeur et voir le résultat affiché dans le navigateur par défaut. - Aptana Studio
Inclut un éditeur PHP. (Windows) - Eclipse IDE
Extension à Eclipse pour une IDE PHP.
Aides au développement
- Php.net
Le site officiel, où trouver un exécutable et les sources. - Hack.
Version de PHP statiquement typée, compatible avec PHP jusqu'en 2018, écrite par Facebook. - HippyVM
Autre machine virtuelle, plus rapide et qui crée un pont avec Python. - EasyPHP
Une installation complète et facilitée, avec Apache, pour programmer en local. - XAMPP Server
Un autre serveur local Windows Apache Linux PHP. Placez vos scripts PHP dans le sous-répertoire htdocs du répertoire d'installation de Xampp ou www pour Wamp et ils pourront fonctionner comme sur un vrai serveur, avec des requêtes MySQL et PhpMyAdmin ou SQLite Manager pour l'administration des bases de données! - Xdebug
Debogueur interactif pour PHP. - PHP France
Forum en français.
Scripts et tutoriels
- Tutoriel SQL avec PHP et MySQL.
Apprendre à réaliser des scripts PHP pour utiliser SQL sur un site Web, avec des exemples. - JavaScript dans PHP. Comment intégrer le compilateur V8 au langage PHP.
Voir aussi: Les frameworks PHP.
Quel est le meilleur éditeur PHP?
Fodart
webmaster