Maison > développement back-end > PHP7 > le corps du texte

Quelles sont les nouveautés de chaque version de PHP7.x ?

醉折花枝作酒筹
Libérer: 2023-02-18 06:02:02
avant
1911 Les gens l'ont consulté

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.

Quelles sont les nouveautés de chaque version de PHP7.x ?

Avant-propos

Le mois dernier, mon collègue m'a vu écrire

$a = $a ?? '';
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
)
*/
Copier après la connexion

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 &#39;1456546&#39;;
}

print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/
Copier après la connexion

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[&#39;user&#39;] ?? &#39;nobody&#39;;
//这两个是等效的  当不存在user 则返回?? 后面的参数

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;

?>
Copier après la connexion

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
Copier après la connexion

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(&#39;ANIMALS&#39;, [
    &#39;dog&#39;,
    &#39;cat&#39;,
    &#39;bird&#39;
]);

echo ANIMALS[1]; // 输出 "cat"
Copier après la connexion
<. 🎜 >utiliser la méthode d'importation par lots

// 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

echo "\u{aa}"; //ª
echo "\u{0000aa}";  //ª  
echo "\u{9999}"; //香
Copier après la connexion

Classe anonyme

<?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.1

Type nullable

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 &#39;elePHPant&#39;;
}

var_dump(testReturn()); //string(10) "elePHPant"

function testReturn(): ?string
{
    return null;
}

var_dump(testReturn()); //NULL

function test(?string $name)
{
    var_dump($name);
}

test(&#39;elePHPant&#39;); //string(10) "elePHPant"
test(null); //NULL
test(); //Uncaught Error: Too few arguments to function test(), 0 passed in...
Copier après la connexion

void

ajoute un type qui renvoie void, tel que

<?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);
Copier après la connexion

Traitement de capture d'exceptions multiples

Cette fonction est assez couramment utilisée dans le développement quotidien parmi eux,

<?php
try {
    // some code
} catch (FirstException | SecondException $e) {  //用 | 来捕获FirstException异常,或者SecondException 异常
  
}
Copier après la connexion

PHP 7.2

PHP7.2 est la moins nouvelle fonctionnalité de la série PHP7

### Permet les virgules de fin dans les espaces de noms groupés

Par exemple,

<?php

use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};
Copier après la connexion

permet de remplacer des méthodes abstraites

<?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

function test(object $obj) : object  //这里 可以输入对象
{
    return new SplQueue();
}

test(new StdClass());
Copier après la connexion

PHP 7.3

PHP7.3 Il n'y a rien de grave au niveau de la syntaxe Changement de niveau.

PHP 7.4

Les attributs de classe prennent en charge la déclaration de type

Félicitations pour que PHP ait franchi une nouvelle étape vers le typage fort

<?php
class User {
    public int $id;
    public string $name;
}
?>
Copier après la connexion

Fonction flèche

Flèche Functions fournit une syntaxe abrégée pour définir des fonctions à l’aide d’une liaison de portée implicite par valeur. C'est similaire à la fonction flèche de JS, mais avec un fn. Une vague de plaintes

<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>
Copier après la connexion

Méthode de support de l'opérateur de fusion nulle

<?php
$array[&#39;key&#39;] ??= computeDefault();
// 类似与这个
if (!isset($array[&#39;key&#39;])) {
    $array[&#39;key&#39;] = computeDefault();
}
?>
Copier après la connexion
Apprentissage recommandé :

Tutoriel vidéo php

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal