Docsyard Demo
Qu'est-ce que PHP?
Qu'est-ce que PHP?
PHP: Hypertext Preprocessor5, plus connu sous son sigle PHP (sigle auto-référentiel), est un langage de programmation libre6, principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP5, mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale. PHP est un langage impératif orienté objet.
PHP a permis de créer un grand nombre de sites web célèbres, comme Facebook, Wikipédia, etc.7 Il est considéré comme une des bases de la création de sites web dits dynamiques mais également des applications web.
Histoire
Le langage PHP a été créé en 1994 par Rasmus Lerdorf pour son site web. C'était à l'origine une bibliothèque logicielle en C8 dont il se servait pour conserver une trace des visiteurs qui venaient consulter son CV. Au fur et à mesure qu'il ajoutait de nouvelles fonctionnalités, Rasmus a transformé la bibliothèque en une implémentation capable de communiquer avec des bases de données et de créer des applications dynamiques et simples pour le Web. Rasmus a alors décidé, en 1995, de publier son code, pour que tout le monde puisse l'utiliser et en profiter9. PHP s'appelait alors PHP/FI (pour Personal Home Page Tools/Form Interpreter). En 1997, deux étudiants, Andi Gutmans et Zeev Suraski, ont redéveloppé le cœur de PHP/FI. Ce travail a abouti un an plus tard à la version 3 de PHP, devenu alors PHP: Hypertext Preprocessor. Peu de temps après, Andi Gutmans et Zeev Suraski ont commencé la réécriture du moteur interne de PHP. C’est ce nouveau moteur, appelé Zend Engine — le mot Zend est la contraction de Zeev et Andi — qui a servi de base à la version 4 de PHP.
Versions
La version actuelle est la version 7.2.9, sortie le 16 août 201817. Elle utilise Zend Engine 2 et introduit une modélisation objet plus performante, une gestion des erreurs fondée sur le modèle des exceptions, ainsi que des fonctionnalités de gestion pour les entreprises. PHP 5 apporte beaucoup de nouveautés, telles que le support de SQLite ainsi que des moyens de manipuler des fichiers et des structures XML basés sur libxml2 :
- une API simple nommée SimpleXML ;
- une API Document Object Model assez complète ;
- une interface XPath utilisant les objets DOM et SimpleXML ;
- intégration de libxslt pour les transformations XSLT via l'extension XSL ;
- une bien meilleure gestion des objets par rapport à PHP 4, avec des possibilités qui tendent à se rapprocher de celles de Java.
Depuis juin 2011 et le nouveau processus de livraison de PHP18, le cycle de livraison de PHP est d'une mise à jour annuelle comportant des changements fonctionnels importants, la durée de vie d'une branche est de 3 ans et trois branches stables sont maintenues. Cela signifie que lorsqu'une nouvelle version de PHP 5.x sort, la version 5.x-3 n'est plus supportée.
Il est à noter qu'historiquement, PHP disposait d'une configuration par défaut privilégiant la souplesse à la sécurité (par exemple register globals, qui a été activé par défaut jusqu'à PHP 4.219). Cette souplesse a permis à de nombreux développeurs d'apprendre PHP mais le revers de la médaille a été que de nombreuses applications PHP étaient mal sécurisées. Le sujet a bien été pris en main par le PHPGroup qui a mis en place des configurations par défaut mettant l'accent sur la sécurité. Il en résultait une réputation de langage peu sécurisé, réputation d'insécurité qui n'a plus de raison d'être.
PHP 6 et Unicode
En 2005, le projet de faire de PHP un langage fonctionnant d'origine en Unicode a été lancé par Andrei Zmievski, ceci en s'appuyant sur la bibliothèque International Components for Unicode (ICU) et en utilisant UTF-16 pour représenter les chaînes de caractères dans le moteur39.
Étant donné que cela représentait un changement majeur tant dans le fonctionnement du langage que dans le code PHP créé par ses utilisateurs, il fut décidé d'intégrer cela dans une nouvelle version 6.0 avec d'autres fonctionnalités importantes alors en développement40. Toutefois, le manque de développeurs experts en Unicode ainsi que les problèmes de performance résultant de la conversion des chaînes de et vers UTF-16 (rarement utilisé dans un contexte web), ont conduit au report récurrent de la livraison de cette version41. Par conséquent, une version 5.3 fut créée en 2009 intégrant de nombreuses fonctionnalités non liées à Unicode qui était initialement prévues pour la version 6.0, notamment le support des espaces de nommage (namespaces) et des fonctions anonymes. En mars 2010, le projet 6.0 intégrant unicode fut abandonné et la version 5.4 fut préparée afin d'intégrer la plupart des fonctionnalités non liées à l'unicode encore dans la branche 6.0, telles que les traits ou l'extension des closures au modèle objet42.
Le projet est depuis passé à un cycle de livraison prévisible (annuel) contenant des avancées significatives mais contenues tout en préservant au maximum la rétro-compatibilité avec le code PHP existant (5.4 en 2012, 5.5 en 2013, 5.6 prévue pour l'été 2014). Depuis janvier 201443, l'idée d'une nouvelle version majeure introduisant Unicode mais se basant sur UTF-8 (largement devenu depuis le standard du Web pour l'Unicode) et permettant certains changements pouvant casser la rétro-compatibilité avec du code PHP ancien est de nouveau discutée et les RFC sont maintenant triées selon leur implémentation en 5.x (évolutions ne causant pas ou marginalement de cassure de la rétro-compatibilité) ou dans la future version majeure (évolutions majeures du moteur et évolutions impliquant une non-compatibilité ascendante).
PHP 7
Au vu des orientations différentes prises par le langage de celles prévues par PHP 6, une partie des développeurs propose de nommer la version succédant à PHP 5 « PHP 7 » au lieu de « PHP 6 ». Un vote parmi les développeurs valide cette proposition par 58 voix contre 2444.
La nouvelle version propose une optimisation du code et, d'après la société Zend, offre des performances dépassant celles de machines virtuelles comme HHVM45,46. Les benchmarks externes montrent des performances similaires pour HHVM et PHP 7, avec un léger avantage d'HHVM dans la plupart des scénarios
Laravel est un framework web PHP gratuit et à source ouverte, créé par Taylor Otwell et destiné au développement d'applications Web suivant le modèle architectural modèle-vue-contrôleur (MVC) et basé sur Symfony. Certaines des fonctionnalités de Laravel sont un système de packaging modulaire avec un gestionnaire de dépendances dédié, différentes manières d'accéder aux bases de données relationnelles, des utilitaires facilitant le déploiement et la maintenance des applications et son orientation vers le sucre syntaxique.
L'histoire
Taylor Otwell a créé Laravel dans le but de fournir une alternative plus avancée au framework CodeIgniter, qui ne fournissait pas certaines fonctionnalités telles que la prise en charge intégrée de l'authentification et de l'autorisation de l'utilisateur. La première version bêta de Laravel a été mise à disposition le 9 juin 2011, suivie de la version Laravel 1 plus tard dans le même mois. Laravel 1 incluait un support intégré pour l'authentification, la localisation, les modèles, les vues, les sessions, le routage et d'autres mécanismes, mais ne prenait pas en charge les contrôleurs, ce qui l'empêchait d'être un véritable framework MVC.
Laravel 2 est sorti en septembre 2011, apportant diverses améliorations de l'auteur et de la communauté. Les principales nouvelles fonctionnalités incluent la prise en charge des contrôleurs, qui ont fait de Laravel 2 un framework entièrement compatible avec MVC, une prise en charge intégrée du principe IoC (inversion of control) et un système de gabarit appelé Blade. Inconvénient, la prise en charge des packages tiers a été supprimée dans Laravel 2.
Laravel 3 a été publié en février 2012 avec un ensemble de nouvelles fonctionnalités, notamment l'interface de ligne de commande appelée Artisan, une prise en charge intégrée pour davantage de systèmes de gestion de base de données, des migrations de base de données sous forme de contrôle de version pour les structures de base de données, une prise en charge événements, et un système de conditionnement appelé Bundles. Une augmentation de la base d'utilisateurs et de la popularité de Laravel alignée avec la sortie de Laravel 3.
Laravel 4, nom de code Illuminate, a été publié en mai 2013. Il s'agissait d'une réécriture complète du framework Laravel, transférant sa présentation dans un ensemble de packages séparés distribués via Composer, qui sert de gestionnaire de packages au niveau de l'application. Un tel agencement a permis d’améliorer l’extensibilité de Laravel 4, qui s’ajoutait à son calendrier officiel de diffusion régulier, qui s'étend sur six mois entre les diffusions mineures. Les nouvelles fonctionnalités de la version 4 de Laravel comprennent l’amorçage de bases de données pour la population initiale de bases de données, la prise en charge des files de messages, la prise en charge intégrée de l’envoi de différents types d’e-mails et la suppression retardée des enregistrements de base de données, appelée suppression logicielle.
Laravel 5 a été publié en février 2015 à la suite de changements internes qui ont abouti à la renumérotation de la future version 4.3 de Laravel. Les nouvelles fonctionnalités de la version 5 de Laravel incluent la prise en charge de la planification de tâches exécutées périodiquement via un package appelé Scheduler, une couche d’abstraction appelée Flysystem qui permet d’utiliser le stockage distant de la même manière que les systèmes de fichiers locaux, une gestion améliorée des actifs du package via Elixir, etc. authentification simplifiée gérée en externe via le package optionnel Socialite. Laravel 5 a également introduit une nouvelle arborescence de répertoires internes pour les applications développées.
En mars 2015, un sondage SitePoint indiquait que Laravel était le framework PHP le plus populaire.
Laravel 5.1, publié en juin 2015, était la première version de Laravel à recevoir un support à long terme (LTS). De nouvelles versions LTS étaient prévues pour une tous les deux ans.
Laravel 5.3 a été publié le 23 août 2016. Les nouvelles fonctionnalités de la version 5.3 sont axées sur l'amélioration de la vitesse des développeurs en ajoutant des améliorations immédiates pour les tâches courantes.
Laravel 5.4 est disponible depuis le 24 janvier 2017 avec de nombreuses nouvelles fonctionnalités telles que Laravel Dusk, Mix Laravel, Composants et fentes de lame, Emails de démarquage, Façades automatiques, Améliorations d'itinéraires, Messagerie d'ordre supérieur pour les collections, et bien d'autres.
Laravel 5.5 est sorti le 30 août 2017.
Laravel 5.6 a été libéré le 7 février 2018.
Laravel 5.7 a été libéré le 4 septembre 2018.
Laravel 5.8 a été libéré le 26 février 2019.
Caractéristiques
Les caractéristiques suivantes constituent les points clés de la conception de Laravel (sauf indication contraire, les descriptions se rapportent aux fonctionnalités de Laravel 3)
- Les bundles fournissent un système de packaging modulaire depuis la sortie de Laravel 3, avec des fonctionnalités groupées déjà disponibles pour une addition facile aux applications. En outre, Laravel 4 utilise Composer en tant que gestionnaire de dépendances pour ajouter des packages PHP indépendants de la structure et spécifiques à Laravel, disponibles dans le référentiel Packagist.
- Eloquent ORM (Object-Relational Mapping) est une implémentation PHP avancée du modèle d’enregistrement actif, fournissant à la fois des méthodes internes pour imposer des contraintes aux relations entre les objets de base de données. Suivant le modèle d’enregistrement actif, Eloquent ORM présente les tables de base de données sous forme de classes, leurs instances d’objet étant liées à des lignes uniques.
- Le constructeur de requêtes, disponible depuis Laravel 3, fournit une alternative d'accès plus direct à la base de données à l'ORM Eloquent. Au lieu d'exiger que les requêtes SQL soient écrites directement, le générateur de requêtes de Laravel fournit un ensemble de classes et de méthodes capables de générer des requêtes par programme. Il permet également la mise en cache sélectionnable des résultats des requêtes exécutées.
- La logique applicative fait partie intégrante des applications développées et est implémentée à l'aide de contrôleurs ou dans le cadre de déclarations de route. La syntaxe utilisée pour définir la logique d'application est similaire à celle utilisée par Sinatraframework.
- Le routage inverse définit une relation entre les liens et les routes, ce qui permet aux modifications ultérieures des routes d'être automatiquement propagées dans les liens pertinents. Lorsque les liens sont créés à l'aide de noms d'itinéraires existants, les identificateurs de ressources uniformes (URI) appropriés sont automatiquement créés par Laravel.
- Les contrôleurs reposants constituent un moyen facultatif de séparer la logique de traitement des demandes HTTP GET et POST.
- Le chargement automatique de classes fournit un chargement automatisé des classes PHP sans qu'il soit nécessaire de gérer manuellement les chemins d'inclusion. Le chargement à la demande empêche l'inclusion de composants inutiles, de sorte que seuls les composants réellement utilisés sont chargés.
- Les compositeurs de vues constituent des unités de code logique personnalisables pouvant être exécutées lors du chargement d'une vue.
- Le moteur de création de modèles de lame combine un ou plusieurs modèles avec un modèle de données pour générer les vues résultantes. Pour ce faire, il transpile les modèles en code PHP mis en cache pour améliorer les performances. Blade fournit également un ensemble de ses propres structures de contrôle, telles que des instructions conditionnelles et des boucles, qui sont mappées en interne sur leurs équivalents PHP. En outre, les services Laravel peuvent être appelés à partir de modèles de lame et le moteur de modélisation lui-même peut être étendu avec des directives personnalisées.
- Les conteneurs IoC permettent de générer de nouveaux objets en suivant le principe IoC (inversion of control), dans lequel le cadre appelle le code spécifique à l'application ou à la tâche, avec l'instanciation et le référencement facultatifs de nouveaux objets en tant que singletons.
- Les migrations fournissent un système de contrôle de version pour les schémas de base de données, permettant d'associer des modifications dans la base de code de l'application et des modifications requises dans la structure de la base de données. En conséquence, cette fonctionnalité simplifie le déploiement et la mise à jour des applications basées sur Laravel.
- L'amorçage de la base de données offre un moyen de renseigner les tables de la base de données avec des données par défaut sélectionnées pouvant être utilisées pour les tests d'application ou exécutées dans le cadre de la configuration initiale de l'application.
- Les tests unitaires font partie intégrante de Laravel: 61–62, qui contient des tests unitaires qui détectent et empêchent les régressions dans le cadre. Les tests unitaires peuvent être exécutés via l'utilitaire de ligne de commande artisan fourni.
- La pagination automatique simplifie la tâche de mise en œuvre, remplaçant les approches de mise en œuvre manuelle habituelles par des méthodes automatisées intégrées à Laravel.
- La demande de formulaire est une fonction de Laravel 5 qui sert de base à la validation des entrées de formulaire par les écouteurs d’événement se liant en interne, ce qui permet d’appeler automatiquement les méthodes de validation de formulaire et de générer le formulaire réel.
- Homestead - une machine virtuelle Vagrant qui fournit aux développeurs Laravel tous les outils nécessaires au développement immédiat de Laravel, notamment Ubuntu, Gulp, Bower et d’autres outils de développement utiles au développement d’applications Web à grande échelle.
Forfaits Première Partie
Les packages prêts à l'emploi fournis par Laravel via Composer et Packagist sont les suivants:
- Introduit dans Laravel 4.2, Cashier fournit une interface permettant de gérer les services de facturation par abonnement fournis par Stripe, tels que le traitement des bons de réduction et la génération de factures.
- SSH, introduit dans Laravel 4.1, permet l'exécution programmatique de commandes CLI sur des serveurs distants utilisant le protocole Secure Shell (SSH) en tant que protocole réseau chiffré.
- Scheduler, introduit dans Laravel 5.0, est un ajout à l'utilitaire de ligne de commande Artisan qui permet la planification par programme de tâches exécutées périodiquement. En interne, le planificateur s'appuie sur le démon cron pour exécuter un seul travail Artisan qui, à son tour, exécute les tâches configurées.
- Flysystem, introduit dans Laravel 5.0, est une couche d'abstraction de système de fichiers qui permet aux systèmes de fichiers locaux et aux services de stockage en nuage fournis par Amazon S3 et Rackspace Cloud d'être utilisés de manière transparente et identique.
- Socialite, introduit dans Laravel 5.0 en tant que package facultatif, fournit des mécanismes simplifiés d’authentification avec différents fournisseurs OAuth, notamment Facebook, Twitter, Google, GitHub et Bitbucket.
Outils supplémentaires
En plus des forfaits intégrés et optionnels de Laravel, Laravel propose également un ensemble payant d'outils et de services supplémentaires.
Laravel Spark
Laravel Spark a été développé par Taylor Otwell et fournit aux entreprises en ligne SaaS des outils supplémentaires leur permettant de s’intégrer à des services tels que Stripe, la production de factures, Bootstrap 4.0 et l’authentification d’équipe. Depuis février 2019, la version du package est 8.0.
Laravel Forge
Laravel propose également Laravel Forge, pour provisionner et déployer des applications PHP illimitées sur DigitalOcean, Linode, AWS, etc. Ses fonctionnalités consistent en la gestion de certificats SSL, de tâches cron, de files d'attente, d'équilibreurs de charge, etc.
Artisan CLI
L'interface de ligne de commande (CLI) de Laravel, appelée Artisan, a été introduite dans Laravel 3 avec un ensemble limité de fonctionnalités. La migration ultérieure de Laravel vers une architecture basée sur Composer a permis à Artisan d'incorporer différents composants du framework Symfony, ce qui a permis de disposer de fonctionnalités Artisan supplémentaires dans Laravel 4.
Les fonctionnalités d'Artisan sont mappées sur différentes sous-commandes de l'utilitaire de ligne de commande Artisan, fournissant des fonctionnalités facilitant la gestion et la création d'applications basées sur Laravel. Les utilisations courantes d’Artisan incluent la gestion des migrations de bases de données et d’amorçage, la publication d’actifs de package et la génération de code passe-partout pour les nouveaux contrôleurs et les nouvelles migrations; ce dernier libère le développeur de la création de squelettes de code appropriés. La fonctionnalité et les fonctionnalités d'Artisan peuvent également être étendues en implémentant de nouvelles commandes personnalisées, qui peuvent par exemple être utilisées pour automatiser des tâches récurrentes spécifiques à une application.