Maison  >  Article  >  développement back-end  >  Explication détaillée des nouvelles fonctionnalités de PHP7.1 et 7.2

Explication détaillée des nouvelles fonctionnalités de PHP7.1 et 7.2

藏色散人
藏色散人avant
2019-03-22 11:10:274250parcourir

Explication détaillée des nouvelles fonctionnalités de PHP7.1 et 7.2

Je vous ai déjà présenté explication détaillée des nouvelles fonctionnalités de php7.0, aujourd'hui nous allons jeter un œil aux nouvelles fonctionnalités de php7.1 et php7.2 Function.

Nouvelles fonctionnalités de php7.1

1. Type nullable

Paramètres et valeurs de retour Une déclaration de type peut être marquée. null en ajoutant un point d'interrogation (?) avant le nom du type. Indique que le type d'un paramètre de fonction ou d'une valeur de retour est soit le type spécifié, soit null.

Regardez l'exemple :

function testReturn(?string $name)
{
    return $name;
}
var_dump(testReturn('yangyi'));
var_dump(testReturn(null));
var_dump(testReturn2());

Sortie d'impression :

$ php php71.php
string(6) "yangyi"
NULL
PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function testReturn(), 0 passed in php71.php on line 22 and exactly 1 expected in php71.php:14
Stack trace:
#0 php71.php(22): testReturn()
#1 {main}
  thrown in php71.php on line 14

Idem que ci-dessus : le troisième a signalé une erreur fatale.

Regardons le cas où la valeur de retour de la fonction est Nullable :

function testReturn3() : ?string
{
    //return "abc";
    //return null;
}
var_dump(testReturn3());

Si elle est ajoutée ? Soit une chaîne de retour, soit null. Vous ne pouvez rien rendre. Une erreur sera signalée.

2.void return type

PHP7.0 a ajouté la fonctionnalité de spécification du type de retour de fonction, mais le type de retour ne peut pas être spécifié comme void. Cette fonctionnalité de 7.1 est. considéré comme un réapprovisionnement. Une fonction définie avec un type de retour void ne peut pas avoir de valeur de retour, même si elle renvoie null :

function testReturn4() : void
{
    //1. 要么啥都不返还 ok
    //2. 要么只return; ok
    //return;
    //3. return null 也会报错
    //return null;
    //4. return 4 会报错
    //return 4;
}
Fatal error: A void function must not return a value in /php71.php on line 70

De plus, void ne peut être utilisé que pour les valeurs de retour et non pour les paramètres. Par exemple, ce qui suit signalera une erreur :

function testReturn6(void $a) : void
{
}
var_dump(testReturn6());
PHP Fatal error:  void cannot be used as a parameter type in php71.php on line 73

Si une méthode est déclarée comme type de retour void dans l'héritage de classe, si la sous-classe en hérite et la remplace, elle ne peut renvoyer que void, sinon un une erreur sera déclenchée :

<?php 
class Foo
{
    public function bar(): void {
    }
}
class Foobar extends Foo
{
    // 覆盖失败
    public function bar(): array { 
        // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void
    }
}

Donc, vous devez faire cela pour ne pas obtenir d'erreur :

class Foo
{
    public $a;
    public function bar(): void {
        $this->a = 2;
    }
}
class Foobar extends Foo
{
    // 覆盖成功
    public function bar(): void {
        $this->a = 3;
    }
}

3.list Les crochets ([ ]) abréviation et ajoutez la clé spécifiée

Vous pouvez utiliser la liste pour parcourir rapidement afin d'obtenir les valeurs dans le tableau. L'abréviation [] peut désormais être utilisée.

$data = [
    [1, &#39;Tom&#39;],
    [2, &#39;Fred&#39;],
];
// list() style
list($id1, $name1) = $data[0];
// [] style
[$id1, $name1] = $data[0];
// list() style
foreach ($data as list($id, $name)) {
    // logic here with $id and $name
}
// [] style
foreach ($data as [$id, $name]) {
    // logic here with $id and $name
}

De plus, cette liste mise à jour peut également spécifier une clé pour le tableau d'index. Cette mise à niveau est géniale et très pratique.

$data = [
    ["id" => 1, "name" => &#39;Tom&#39;],
    ["id" => 2, "name" => &#39;Fred&#39;],
];
// list() style
list("id" => $id1, "name" => $name1) = $data[0];
// [] style
["id" => $id1, "name" => $name1] = $data[0];
// list() style
foreach ($data as list("id" => $id, "name" => $name)) {
    // logic here with $id and $name
}
// [] style
foreach ($data as ["id" => $id, "name" => $name]) {
    // logic here with $id and $name
}

Avant que cette fonction ne soit pas disponible, nous utilisions habituellement while + each pour parcourir le tableau d'index à l'aide de list :

$data = [
    ["id" => 1, "name" => &#39;Tom&#39;],
    ["id" => 2, "name" => &#39;Fred&#39;],
];
while (list($id, name) = each($data)) {
    echo "$key => $val\n";
}

Remarque : la fonction each a été déplacée dans PHP 7.2 En dehors de! Par conséquent, n'utilisez pas cette méthode pour parcourir le tableau d'index

4. Définition de la plage visible des constantes de classe

Avant, les constantes de la classe étaient déclarées comme const, mais il n'y avait aucune propriété visible. Maintenant les attributs visibles de la méthode sont transplantés :

<?php 
class ConstDemo 
{
    // 常量默认为 public
    const PUBLIC_CONST = 0;
    // 可以自定义常量的可见范围
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
    // 多个常量同时声明只能有一个属性
    private const FOO = 1, BAR = 2;
}

La méthode d'utilisation est la même que la méthode de la classe. Je n’entrerai pas dans les détails.

5. Prise en charge du décalage de chaîne négatif

Il y a 2 mises à jour, 1 consiste à prendre la chaîne directement, 2 est que le troisième paramètre de la fonction strpos prend en charge les nombres négatifs. Indique une prise par la queue.

var_dump("abcdef"[-2]); // e
var_dump(strpos("aabbcc", "b", -3)); //3

La variable chaîne peut prendre la valeur directement sans passer le nom de la variable. Elle a été ajoutée en php5.5. Maintenant, vous pouvez le prendre à partir de la queue :

var_dump("abcdef"[-2]); // 从末尾取倒数第2个字符:e
var_dump("abcdef"[2]); // 从前面取第2个,从0开始:c
$string = &#39;bar&#39;;
echo $string[1], $string[-1]; // a r

6. Capture multi-conditions

Dans l'instruction try...catch précédente, chaque capture ne peut que être défini Un jugement conditionnel :

try {
    // Some code...
} catch (ExceptionType1 $e) {
    // 处理 ExceptionType1
} catch (ExceptionType2 $e) {
    // 处理 ExceptionType2
} catch (Exception $e) {
    // ...
}

peut désormais être traité plusieurs fois ensemble. Utilisez "|" pour séparer.

try {
    // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
    // 对于 ExceptionType1 和 ExceptionType2 的处理
} catch (Exception $e) {
    // ...
}

php7.2

php 7.2 est principalement une mise à jour de niveau inférieur pour améliorer les performances. Il n'y a pas beaucoup de mises à jour au niveau de la syntaxe commune, nous les ignorerons donc ici.

Recommandations associées : "Tutoriel 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer