Le développeur Brent a publié un article détaillant à quoi ressemble PHP en 2019.
Brent a admis que PHP a encore quelques problèmes, tels que de nombreuses fonctions principales ont toujours des signatures de méthode incohérentes et les paramètres de configuration sont toujours déroutants, mais selon ses propres mots De Du point de vue de l'expérience en développement, il estime que PHP est un excellent choix pour le développement Web. Grâce à PHP, il peut créer des applications fiables, maintenables et de haute qualité, et lui-même et ses clients sont satisfaits du résultat final. (Étude recommandée : Thème technique PHP7)
Dans l'article, Brent se concentre sur les bons aspects du développement de PHP au fil des années. Il explique à travers plusieurs points que « PHP n'est pas. plus C'était un langage terrible il y a dix ans ":
● PHP est activement développé et de nouvelles versions seront publiées chaque année
● Les performances s'améliorent constamment après PHP 5
● Il existe un écosystème linguistique très actif composé de frameworks, de packages et de plateformes
● PHP est en constante évolution et de nombreuses nouvelles fonctionnalités ont été ajoutées ces dernières années
● Divers outils de développement ont été développés dans le passé. Il a mûri au cours de plusieurs années et continue de croître
PHP est activement développé et de nouvelles versions sont publiées chaque année
Le PHP actuel La version 7.3 est sortie en décembre de l'année dernière, la 7.4 est attendue Sortie à la fin de cette année, PHP 8.0 sera la prochaine version après la 7.4.
Depuis l'ère 5.X, l'équipe principale espère publier une nouvelle version chaque année, et elle a réussi à maintenir un tel cycle de publication au cours des quatre dernières années. En règle générale, chaque nouvelle version est officiellement prise en charge activement pendant deux ans, suivie d'un an de correctifs de sécurité uniquement, dans le but d'inciter les développeurs PHP à rester à jour autant que possible.
Pour des cycles de publication et de maintenance plus spécifiques, vous pouvez consulter l'introduction sur le site officiel de PHP :
https://www.php .net/supported- versions.php
En regardant le tableau ci-dessus, vous constaterez peut-être que le numéro de version est passé de 5 à 7. Alors, où est passé PHP 6 ?
Au fait, vulgarisons un peu la science. En fait, dès 2005, la communauté PHP a lancé PHP 6. Cependant, en raison des grandes difficultés liées à la mise en œuvre d'Unicode, le projet a finalement été abandonné. Les responsables de PHP n'ont pas publié PHP 6 GA, et PHP 6 a été annulé en 2010. Bien que le projet PHP 6 ait été annulé, un grand nombre de fonctionnalités implémentées ont été intégrées dans PHP 5.
PHP 6 a été annulé, mais le développement précédent de cette version majeure a été réalisé sous le nom de PHP 6, c'est pourquoi de nombreux documents et livres de référence utilisent « PHP 6 » pour faire référence à cette version. Les responsables craignaient que cela ne crée de la confusion après l'abandon de PHP 6, ils n'ont donc tout simplement pas utilisé le numéro de version de PHP 6.X et sont passés directement de 5 à 7.
Pour plus de détails, veuillez consulter la description officielle :
Performance après PHP 5 Dans l'amélioration continue de
PHP 7.0, la partie centrale de PHP est complètement réécrite, apportant le dernier moteur Zend, qui améliore les performances de PHP de deux à trois fois.
L'auteur a cité le test de référence sur https://kinsta.com/blog/php-benchmarks pour illustrer ce point, soulignant que depuis la version 7.0, les performances de PHP se sont améliorées, et les applications et frameworks Web PHP dans d'autres langues, les performances sont bien meilleures que dans certains cas. Mais il a aussi déclaré : "Bien sûr, le framework PHP ne sera pas meilleur que C et Rust, mais il est bien meilleur que Rails ou Django, et comparable à ExpressJS
Il existe des frameworks très actifs." , packages et plateformes. Language Ecology
En ce qui concerne le framework PHP, il faut mentionner WordPress, mais l'auteur a déclaré que WordPress ne représente définitivement pas l'écosystème PHP actuel : "Le framework PHP n'est plus juste WordPress."
Il existe actuellement deux principaux frameworks de développement d'applications web en PHP : Symfony et Laravel, ainsi que Zend, Yii, Cake et Code Igniter, en plus de nombreux frameworks plus petits.
Symfony et Laravel disposent tous deux d'énormes écosystèmes de packages et de logiciels, notamment un panneau d'administration et un CRM, des progiciels indépendants, CI, des analyseurs, des serveurs de socket Web, des gestionnaires de files d'attente et des intégrations de paiement, etc.
De plus, des frameworks PHP asynchrones ont également vu le jour ces dernières années. Swoole, Amp et ReactPHP sont les meilleurs d'entre eux. Ce sont des frameworks et des serveurs écrits en PHP ou dans d'autres langages pour exécuter du vrai PHP asynchrone.
L'auteur estime qu'une façon de mesurer l'état actuel de l'écosystème PHP consiste à examiner les données de Packagist, le principal référentiel de packages PHP. Grâce au graphique de tendance suivant, vous pouvez voir que le nombre de progiciels a augmenté de façon exponentielle, et il existe actuellement 223 217 progiciels enregistrés, et le nombre total d'installations a atteint 14 827 204 847. L'écosystème PHP n'est plus aussi faible qu'avant.
Nombre de packages disponibles dans différentes versions
Nombre de packages installés par mois
De plus, vous pouvez également consulter les dernières données sur les statistiques d'utilisation de PHP et le positionnement sur le marché :
http://www.php.cn/toutiao-418943. html
PHP est en constante évolution et de nombreuses nouvelles fonctionnalités ont été ajoutées ces dernières années
Bien qu'async et wait, deux fonctionnalités très demandées, n'aient pas n'a pas encore été implémenté. Cependant, de nouvelles fonctionnalités de PHP ont continué à apparaître ces dernières années et le langage lui-même a été amélioré sous divers aspects.
Vous trouverez ci-dessous quelques nouvelles fonctionnalités PHP qui ont beaucoup attiré l'attention :
● Fermetures courtes
Fermetures courtes, également connues sous le nom de fonctions fléchées, qui est un moyen d'écrire des fonctions plus courtes en PHP. Les fermetures peuvent être extrêmement utiles lorsqu'elles sont transmises à des fonctions comme array_map ou array_filter.
// A collection of Post objects $posts = [/* … */]; $ids = array_map(fn($post) => $post->id, $posts);
Quantity Opérateur de coalescence nul
Opérateur de coalescence nul, il est similaire à l'opérateur ternaire, mais l'opérande de gauche se comporte comme isset au lieu d'utiliser simplement sa valeur booléenne. Cela rend cet opérateur particulièrement utile pour les tableaux. Il attribue également une valeur par défaut lorsque la variable n'est pas définie.
$undefined ?? 'fallback'; // 'fallback' $unassigned; $unassigned ?? 'fallback'; // 'fallback' $assigned = 'foo'; $assigned ?? 'fallback'; // 'foo' '' ?? 'fallback'; // '' 'foo' ?? 'fallback'; // 'foo' '0' ?? 'fallback'; // '0' 0 ?? 'fallback'; // 0 false ?? 'fallback'; // false
Quantity Traits
Trait est un mécanisme de réutilisation de code qui peut réduire certaines des limitations de l'héritage unique. La sémantique de la combinaison de traits avec des classes définit un moyen de réduire la complexité et d'éviter les problèmes typiques associés à l'héritage multiple et aux mixins.
Le trait est similaire à une classe, mais n'est utilisé que pour regrouper des fonctions de manière fine et cohérente. Il s'agit d'un complément à l'héritage traditionnel et peut réaliser une combinaison horizontale de comportements que les applications membres de la classe ne nécessitent pas. héritage.
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?>
Quantity Propriétés typées
Les attributs sont typés et les variables de classe peuvent définir des types, tels que :
class A { public string $name; public Foo $foo; }
● Opérateur de propagation
Opérateur d'expansion, qui est une nouvelle syntaxe permettant de décompresser directement les paramètres dans l'appel, tels que :
call_user_func_array([$db, 'query'], array_merge(array($query), $params));
Le tableau $params peut être étendu directement en utilisant la nouvelle syntaxe :
$db->query($query, ...$params);
● Compilateur JIT : le support JIT est confirmé dans PHP 8
JIT est une stratégie de compilateur qui exprime le code comme un état intermédiaire qui sera converti en code machine dépendant de l'architecture et exécuté à la volée. En PHP, cela signifie que le JIT traite les instructions générées par Zend VM comme des représentations intermédiaires et les exécute dans un code machine dépendant de l'architecture, ce qui signifie que ce n'est plus Zend VM qui héberge le code, mais le CPU sous-jacent.
Quantity FFI
Foreign Function Interface, qui permet d'appeler des fonctions C à partir de langages de script purs et d'utiliser des types de données C pour développer du code "des systèmes plus efficacement". Pour PHP, FFI ouvre la possibilité d'écrire des extensions PHP et de se lier aux bibliothèques C en utilisant du PHP pur.
Quantity Classes anonymes
Classes anonymes pour créer des objets jetables simples :
<?php // Pre PHP 7 code class Logger { public function log($msg) { echo $msg; } } $util->setLogger(new Logger()); // PHP 7+ code $util->setLogger(new class { public function log($msg) { echo $msg; } });
● Déclarations de type de retour
Déclarer le type de retour :
<?php function sum($a, $b): float { return $a + $b; } // Note that a float will be returned. var_dump(sum(1, 2)); ?>
Mode strict :
<?php declare(strict_types=1); function sum($a, $b): int { return $a + $b; } var_dump(sum(1, 2)); var_dump(sum(1, 2.5)); ?>
● Cryptographie contemporaine
Faire de Libsodium une extension principale, Libsodium est une bibliothèque cryptographique moderne composé d'algorithmes de cryptage soigneusement sélectionnés par des experts en sécurité pour éviter les vulnérabilités des canaux secondaires.
● Générateurs
Les générateurs fournissent un moyen simple et sans passe-partout d'implémenter des itérateurs.
Divers outils de développement ont mûri au cours des dernières années et ont continué de croître
Dans la dernière partie, l'auteur a analysé que les outils de développement PHP actuels ont également mûri et ont continué de croître.
Il a donné l'exemple des analyseurs statiques, tels que Psalm, Phan et PHPStan. Ces outils analyseront statiquement le code PHP et signaleront tout type d'erreurs et de bugs possibles. Dans une certaine mesure, les fonctionnalités qu'ils fournissent sont comparables à celles de TypeScript, mais comme PHP ne propose actuellement pas de transpile, la syntaxe personnalisée n'est pas autorisée. Cela signifie que le développement PHP doit s'appuyer sur la documentation, mais en fait, le créateur de PHP, Rasmus Lerdorf, a mentionné un jour l'idée d'ajouter un moteur d'analyse statique au noyau.
受到 JavaScript 社区的启发,目前 PHP 也有在进行转换的相关研发,比如项目 Pre,它允许新的 PHP 语法转换为普通的 PHP 代码。虽然这个想法已经在 JavaScript 中被证明可行,但作者认为在 PHP 中,只有先提供了适当的 IDE 和静态分析支持,它才有可能实现。
讲完了 PHP 当前的这些变化,作者最后没有以“PHP 是世界上最好的语言”作结语,相反,他是这样说的:
All that being said, feel free to still think of PHP as a crappy language... I can say in confidence that I enjoy working with it.
话虽如此,但是还要继续认为 PHP 是蹩脚的语言那也是可以的。我可以很自信地说我喜欢 PHP。