Quelles sont les nouveautés de chaque version de PHP7.x ?
Cet article vous présentera les nouveautés de chaque version de PHP7.x. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Avant-propos
Le mois dernier, mon collègue m'a vu écrire
$a = $a ?? '';
et m'a demandé quelle était cette façon d'écrire, y en a-t-il une autre façon de l'écrire ? J'ai dit qu'il s'agissait d'une méthode d'écriture qui n'est disponible qu'en PHP7 et supérieur. Vous ne savez pas ? Il a dit qu'il ne savait pas.
J'ai réfléchi un moment et j'ai décidé de commencer à écrire ce blog.
PHP7 devrait être un PHP moderne en plus des bases. Parce qu'en PHP7, les définitions de types fortes et certaines méthodes d'écriture grammaticale, telles que les opérateurs de comparaison combinés, définissent() peuvent définir des tableaux et d'autres fonctionnalités. L'introduction formelle commence ci-dessous, en commençant par PHP7.0. De nouvelles versions seront ajoutées à l'avenir, et elles seront ajoutées les unes après les autres.
D'accord, commençons
PHP 7.0
Déclaration de type scalaire
Qu'est-ce qu'un type scalaire ?
Quatre types scalaires :
booléen (Booléen)
entier (entier)
float (virgule flottante, également connu sous le nom de double)
string (string)
Deux types composites :
array (array)
object (object)
La ressource est une ressource spéciale variable qui contient une référence à une ressource externe. Les ressources sont créées et utilisées via des fonctions spécialisées. Les variables de type de ressource sont des poignées spéciales pour l'ouverture de fichiers, les connexions à une base de données, les zones de canevas graphique, etc.
Pour faire simple, un type scalaire est un type de données qui définit des variables.
En php5, il y a des noms de classes, des interfaces, des tableaux et des fonctions de rappel. En PHP, des chaînes, des entiers, des flottants et des booléens ont été ajoutés. Prenons un exemple ci-dessous. Voir l'exemple de everything
function typeInt(int $a) { echo $a; } typeInt('sad'); // 运行,他讲会报错 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given
Ici, nous définissons que $a doit être de type int Si une chaîne est passée dans la fonction type, une erreur sera signalée. Modifions le code ci-dessus et c'est tout.
function typeString(string $a) { echo $a; } typeString('sad'); //sad
Déclaration du type de valeur de retour
La valeur de retour d'une méthode de fonction peut être définie par exemple, si une de mes fonctions doit renvoyer un int. tapez, il le définira. Si vous renvoyez un int, une erreur sera signalée si vous renvoyez une chaîne. Comme suit
<?php function returnArray(): array { return [1, 2, 3, 4]; } print_r(returnArray()); /*Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) */
Et si nous définissons un tableau et renvoyons une chaîne ou d'autres types ?
Ensuite, il signalera une erreur telle que
function returnErrorArray(): array { return '1456546'; } print_r(returnErrorArray()); /* Array Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in */
opérateur de fusion nul
Puisqu'il existe de nombreuses situations où les expressions ternaires et isset() sont utilisées à en même temps, dans l'utilisation quotidienne, nous avons ajouté le sucre syntaxique de l'opérateur de coalescence nul (??). Si la variable existe et n'est pas NULL, elle renvoie sa propre valeur, sinon elle renvoie son deuxième opérande.
<?php $username = $_GET['user'] ?? 'nobody'; //这两个是等效的 当不存在user 则返回?? 后面的参数 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>
Opérateur de vaisseau spatial
// 整数 echo 1 <=> 1; // 0 当左边等于右边的时候,返回0 echo 1 <=> 2; // -1 当左边小于右边,返回-1 echo 2 <=> 1; // 1 当左边大于右边,返回1 // 浮点数 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // 字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1
define Définir un tableau
Dans les versions antérieures à PHP7, Define n'était pas capable de définir des tableaux. Maintenant, c'est possible, comme
define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // 输出 "cat"
// PHP 7 之前的代码
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;
// PHP 7+ 及更高版本的代码
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
Copier après la connexion
###Syntaxe de traduction de point de code Unicode// PHP 7 之前的代码 use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C; use function some\namespace\fn_a; use function some\namespace\fn_b; use function some\namespace\fn_c; use const some\namespace\ConstA; use const some\namespace\ConstB; use const some\namespace\ConstC; // PHP 7+ 及更高版本的代码 use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC};
echo "\u{aa}"; //ª echo "\u{0000aa}"; //ª echo "\u{9999}"; //香
<?php
interface Logger {
public function log(string $msg);
}
class Application {
private $logger;
public function getLogger(): Logger {
return $this->logger;
}
public function setLogger(Logger $logger) {
$this->logger = $logger;
}
}
$app = new Application;
$app->setLogger(new class implements Logger { //这里就是匿名类
public function log(string $msg) {
echo $msg;
}
});
Copier après la connexion
PHP 7.1Type nullable<?php interface Logger { public function log(string $msg); } class Application { private $logger; public function getLogger(): Logger { return $this->logger; } public function setLogger(Logger $logger) { $this->logger = $logger; } } $app = new Application; $app->setLogger(new class implements Logger { //这里就是匿名类 public function log(string $msg) { echo $msg; } });
Les types de paramètres et les valeurs de retour peuvent désormais être nullables en ajoutant un point d'interrogation avant le type. Lorsque cette fonctionnalité est activée, les paramètres transmis ou le résultat renvoyé par la fonction sont soit du type donné, soit null .
<?php function testReturn(): ?string { return 'elePHPant'; } var_dump(testReturn()); //string(10) "elePHPant" function testReturn(): ?string { return null; } var_dump(testReturn()); //NULL function test(?string $name) { var_dump($name); } test('elePHPant'); //string(10) "elePHPant" test(null); //NULL test(); //Uncaught Error: Too few arguments to function test(), 0 passed in...
<?php function swap(&$left, &$right) : void { if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp; } $a = 1; $b = 2; var_dump(swap($a, $b), $a, $b);
<?php try { // some code } catch (FirstException | SecondException $e) { //用 | 来捕获FirstException异常,或者SecondException 异常 }
<?php use Foo\Bar\{ Foo, Bar, Baz, };
<?php
abstract class A
{
abstract function test(string $s);
}
abstract class B extends A
{
// overridden - still maintaining contravariance for parameters and covariance for return
abstract function test($s) : int;
}
Copier après la connexion
Nouveaux types d'objets<?php abstract class A { abstract function test(string $s); } abstract class B extends A { // overridden - still maintaining contravariance for parameters and covariance for return abstract function test($s) : int; }
<?php
function test(object $obj) : object //这里 可以输入对象
{
return new SplQueue();
}
test(new StdClass());
Copier après la connexion
PHP 7.3PHP7.3 Il n'y a rien de grave au niveau de la syntaxe Changement de niveau. PHP 7.4Les attributs de classe prennent en charge la déclaration de typeFélicitations pour que PHP ait franchi une nouvelle étape vers le typage fort<?php function test(object $obj) : object //这里 可以输入对象 { return new SplQueue(); } test(new StdClass());
<?php class User { public int $id; public string $name; } ?>
<?php $factor = 10; $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]); // $nums = array(10, 20, 30, 40); ?>
<?php
$array['key'] ??= computeDefault();
// 类似与这个
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
?>
Copier après la connexionApprentissage recommandé :
<?php $array['key'] ??= computeDefault(); // 类似与这个 if (!isset($array['key'])) { $array['key'] = computeDefault(); } ?>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Cet article détaille la gestion efficace de la session PHP 7, couvrant les fonctionnalités de base comme session_start (), $ _Session, Session_Destroy () et sécuriser la manipulation des cookies. Il met l'accent sur les meilleures pratiques de sécurité, y compris les HTTP, la régénération d'identification de session,

Cet article explique comment surveiller les performances de l'application PHP 7 à l'aide d'une nouvelle relique. Il détaille la configuration de New Relic, les indicateurs de performances clés (KPI) comme le score APDEX et le temps de réponse, l'identification du goulot d'étranglement via des traces de transaction et une piste d'erreur

Cet article détaille la mise à niveau de PHP 5.6 vers PHP 7, en mettant l'accent sur les étapes cruciales comme le sauvegarde, la vérification de la compatibilité des serveurs et le choix d'une méthode de mise à niveau (gestionnaire de package, compilation, panneau de configuration ou configuration du serveur Web). Il aborde Potentia

Cet article explique la mise en œuvre de PHP 7, en utilisant SPL_autoload_register () pour charger des classes à la demande. Il détaille les meilleures pratiques telles que la mise en œuvre et la mise en cache basées sur l'espace de noms pour l'optimisation des performances, aborde les problèmes communs (par exemple, la classe n'est pas trouvée

Cet article guide les développeurs PHP 7 sur l'utilisation de Git pour le contrôle de version. Il couvre l'initialisation, la mise en scène, la validation, l'ignorance des fichiers, les référentiels distants, la branche, la fusion, la résolution des conflits et les commandes GIT essentielles. Meilleures pratiques pour l'efficacité

Cet article détaille le déploiement d'applications PHP 7, de méthodes de couvrage (FTP, SSH, outils de déploiement), de configuration du serveur (Apache / Nginx, PHP-FPM), de configuration de base de données et de considérations de sécurité cruciales. Il met en évidence des défis communs comme le serveur compatib

Cet article explique comment utiliser xdebug pour déboguer le code PHP 7. Il couvre la configuration XDEBUG (installation, paramètres php.ini, configuration IDE), utilisation des points d'arrêt (conditionnel, fonction, télécommande) et problèmes de connexion de dépannage. Debuggi efficace

Cet article explique la programmation orientée objet (POO) dans PHP 7, mettant en évidence ses avantages: modularité, réutilisabilité, maintenabilité et organisation de code améliorée. Il détaille les classes, les objets, l'héritage et le polymorphisme, illustrant leur utilisation
