Exemples détaillés de nouvelles fonctionnalités de PHP7.1 et 7.2

小云云
Libérer: 2023-03-21 12:38:01
original
9364 Les gens l'ont consulté

Nouvelles fonctionnalités de php7.1

1. Type Nullable

La déclaration de type des paramètres et des valeurs de retour peut être effectuée en ajoutant un point d'interrogation (? avant le type name ) pour le marquer comme nul. 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());
Copier après la connexion
Copier après la connexion

Sortie d'impression :

$ php php71.phpstring(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:14Stack trace:#0 php71.php(22): 
testReturn()#1 {main}
  thrown in php71.php on line 14
Copier après la connexion

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

Si ? est ajouté, elle renverra soit une chaîne, 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 un supplément. 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;}
Copier après la connexion
Copier après la connexion
Fatal error: A void function must not return a value in /php71.php on line 70
Copier après la connexion

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

function testReturn6(void $a) : void{}

var_dump(testReturn6());
Copier après la connexion
Copier après la connexion
PHP Fatal error:  void cannot be used as a parameter type in php71.php on line 73
Copier après la connexion
Copier après la connexion

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

Donc, vous devez faire ceci, et vous n'obtiendrez pas d'erreur :

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

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() stylelist($id1, $name1) = $data[0];// [] style[$id1, $name1] = $data[0];// list() styleforeach ($data as list($id, $name)) {    // logic here with $id and $name}// [] styleforeach ($data as [$id, $name]) {    // logic here with $id and $name}
Copier après la connexion

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() stylelist("id" => $id1, "name" => $name1) = $data[0];
// [] style["id" => $id1, "name" => $name1] = $data[0];
// list() styleforeach ($data as list("id" => $id, "name" => $name)) {    
// logic here with $id and $name
}
// [] styleforeach ($data as ["id" => $id, "name" => $name]) {    
// logic here with $id and $name}
Copier après la connexion

Avant que cette fonction ne soit pas disponible, nous utilisions généralement while + each pour parcourir le tableau d'index en utilisant list :

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

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

3. Paramètre de plage visible des constantes de classe

Les constantes de la classe ont été déclarées avec const auparavant, et elles l'étaient. attribut non 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;
}
Copier après la connexion

La méthode d'utilisation est la même que la méthode de la classe. Pas plus de détails.

4. 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]); // evar_dump(strpos("aabbcc", "b", -3)); //3
Copier après la connexion
Copier après la connexion

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

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

5. Catch multi-conditions

Dans l'instruction try...catch précédente, chaque catch ne peut définir qu'un seul jugement conditionnel :

try {    // Some code...} catch (ExceptionType1 $e) {    
// 处理 ExceptionType1} catch (ExceptionType2 $e) {    
// 处理 ExceptionType2} catch (Exception $e) {    // ...}
Copier après la connexion

Maintenant, plusieurs peuvent être traités ensemble. Divisez avec "|".

try {
    // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
    // 对于 ExceptionType1 和 ExceptionType2 的处理
} catch (Exception $e) {
    // ...}
Copier après la connexion
Copier après la connexion

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.

J'ai déjà écrit sur les nouvelles fonctionnalités et les nouvelles fonctionnalités de php7.0 et des anciennes versions de php. Aujourd'hui, jetons un œil aux nouvelles fonctionnalités de php7.1 et php7.2.

Nouvelles fonctionnalités de php7.1

1. Type Nullable

La déclaration de type des paramètres et des valeurs de retour peut être effectuée en ajoutant un point d'interrogation avant le nom du type. ( ?) pour le marquer comme nul. 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(&#39;yangyi&#39;));
var_dump(testReturn(null));
var_dump(testReturn2());
Copier après la connexion
Copier après la connexion

Sortie d'impression :

$ php php71.phpstring(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:14Stack trace:#0 php71.php(22): testReturn()#1 {main}
  thrown in php71.php on line 14
Copier après la connexion

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

Si ? est ajouté, elle renverra soit une chaîne, 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 un supplément. 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;}
Copier après la connexion
Copier après la connexion
Fatal error: A void function must not return a value in /php71.php on line 70
Copier après la connexion

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

function testReturn6(void $a) : void{}

var_dump(testReturn6());
Copier après la connexion
Copier après la connexion
PHP Fatal error:  void cannot be used as a parameter type in php71.php on line 73
Copier après la connexion
Copier après la connexion

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

Donc, vous devez faire ceci, et vous n'obtiendrez pas d'erreur :

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

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() stylelist($id1, $name1) = $data[0];// [] style[$id1, $name1] = $data[0];
// list() styleforeach ($data as list($id, $name)) {    // logic here with $id and $name}
// [] styleforeach ($data as [$id, $name]) {    // logic here with $id and $name}
Copier après la connexion

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() stylelist("id" => $id1, "name" => $name1) = $data[0];
// [] style["id" => $id1, "name" => $name1] = $data[0];
// list() styleforeach ($data as list("id" => $id, "name" => $name)) {   
 // logic here with $id and $name}// [] styleforeach ($data as ["id" => $id, "name" => $name]) {   
  // logic here with $id and $name}
Copier après la connexion

Avant que cette fonction ne soit disponible, nous utilisions généralement while + each pour parcourir le tableau d'index en utilisant list :

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

Remarque : Le chaque fonction a été supprimée dans PHP 7.2 ! Par conséquent, n'utilisez pas cette méthode pour parcourir le tableau d'index

3. Paramètre de plage visible des constantes de classe

Auparavant, les constantes de la classe étaient déclarées avec const, et elles n’étaient pas visibles. 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;
}
Copier après la connexion

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

4. 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]); // evar_dump(strpos("aabbcc", "b", -3)); //3
Copier après la connexion
Copier après la connexion

string变量可以直接取值,不用通过变量名,是在php5.5加入的。现在可以从尾部取:

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

5.多条件 catch

在以往的 try … catch 语句中,每个 catch 只能设定一个条件判断:

try {    // Some code...} catch (ExceptionType1 $e) {    
// 处理 ExceptionType1} catch (ExceptionType2 $e) {    
// 处理 ExceptionType2} catch (Exception $e) {    
// ...}
Copier après la connexion

现在可以多个一起处理。用”|” 分割。

try {
    // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
    // 对于 ExceptionType1 和 ExceptionType2 的处理
} catch (Exception $e) {
    // ...}
Copier après la connexion
Copier après la connexion

php7.2

php 7.2大都是底层的更新,提高性能。没有太大常用语法层面的更新,这里就略过了。

相关推荐:

谈谈 PHP7新增功能

PHP7新增 功能,php7新增功能

PHP5.2至5.6的新增功能详解

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:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!