Maison  >  Article  >  développement back-end  >  Explication détaillée des nouvelles fonctionnalités de php7

Explication détaillée des nouvelles fonctionnalités de php7

零到壹度
零到壹度original
2018-03-24 09:56:112227parcourir

Cette fois, je vais résumer les nouvelles fonctionnalités de php7. Ce qui suit est un cas pratique. Suivons les traces de l'éditeur et jetons un œil.


Nouvelles fonctionnalités PHP7

Déclaration de type scalaire (nécessite que le paramètre soit un type spécifique, si le type de paramètre ne correspond pas, un fatal une erreur se produira dans php5, php7 lancera une exception TypeError)

a deux modes : obligatoire (par défaut) et le mode strict

les paramètres de type sont :

. 1. string

2. int

3. float

4.bool

Ils étendent d'autres types introduits dans php5

1. Nom de la classe

2. Interface

3. Tableau

4. Type de rappel

Par exemple : 🎜>

<span style="font-size:18px;">function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}
var_dump(sumOfInts(2, &#39;3&#39;, 4.1));</span>
Sortie :

int(9)


Déclaration de type de retour


php7 ajoute la prise en charge des types de retour, qui sont cohérents avec les types de paramètres La déclaration est très similaire, la déclaration du type de retour

précise le type de la valeur de retour de la fonction. Les types disponibles sont les mêmes que ceux disponibles dans la déclaration des paramètres.

Par exemple :

<span style="font-size:18px;"><?php
function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
以上例程会输出:
Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)</span>


Opérateur de coalescence NULL

Si la variable existe et que la valeur n'est pas NULL, elle renverra sa propre valeur, sinon elle renverra son deuxième paramètre


$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
Les résultats des expressions supérieure et inférieure sont les mêmes.


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


Combinaison d'opérateurs de comparaison

est utilisé pour comparer deux expressions. Lorsque $a est supérieur, égal ou inférieur à $b, il renvoie respectivement 1, 0 ou -1


Par exemple :


<span style="font-size:18px;"><?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?></span>

Définir un tableau constant

<?php
define(&#39;ANIMALS&#39;, [
    &#39;dog&#39;,
    &#39;cat&#39;,
    &#39;bird&#39;
]);
echo ANIMALS[1]; // outputs "cat"
?>
php5.6 中 仅能通过const 定义
<?php
const $a = [
     &#39;a&#39;,&#39;b&#39;,&#39;c&#39;,
];
echo $a[1] ; //输出 “b”
?>

Classe anonyme via definition() En prenant en charge une nouvelle classe pour instancier une classe anonyme, cela peut être utilisé pour remplacer certaines classes de complétion qui ne sont utilisées qu'une seule fois
Fournir un filtrage pour unserialize()


IntlChar

<span style="font-size:18px;"><?php
// 把所有的对象转换为 __PHP_Incomplete_Class object
$data = unserialize($foo, ["allowed_classes" => false]);
// 除了MyClass,MyClass2 都转换为 into __PHP_Incomplete_Class object 
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);
// 默认的行为,接受所有的参数
$data = unserialize($foo, ["allowed_classes" => true]);
</span>

La classe IntlChar nouvellement ajoutée est conçue pour exposer davantage de fonctions ICU. Cette classe se définit. Il existe de nombreuses méthodes statiques pour exploiter les caractères Unicode dans plusieurs jeux de caractères <.>Si vous souhaitez utiliser cette classe, vous devez d'abord installer l'extension Intl

Attendu


devrait être une méthode rétrocompatible et améliorée du précédent assert(), qui rend l'activation des assertions dans un environnement de production gratuite et offre la possibilité de lancer des exceptions caractéristiques lorsque les assertions échouent.

Maintenant, assert() est une construction de langage qui permet au premier argument d'être une expression plutôt qu'une simple chaîne à évaluer ou un booléen à tester

Utiliser utiliser pour déclarer un ensemble de classes



comme suit :



L'expression de retour du générateur

<span style="font-size:18px;"><?php
// Pre PHP 7 code
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+ code
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};
?>
</span>


est la suivante :


Un générateur peut déléguer à un autre générateur Le dispositif


est le suivant :
<span style="font-size:18px;"><?php
$gen = (function() {
    yield 1;
    yield 2;
    return 3;
})();
foreach ($gen as $val) {
    echo $val, PHP_EOL;
}
echo $gen->getReturn(), PHP_EOL;// 换行,为了提高源码可读性
以上例程会输出:
1
2
3
</span>

Nouvelle fonction de division entière intp()


est la suivante :
<span style="font-size:18px;"><?php
function gen()
{
    yield 1;
    yield 2;
    yield from gen2();
}
function gen2()
{
    yield 3;
    yield 4;
}
foreach (gen() as $val)
{
    echo $val, PHP_EOL;
}
?>
以上例程会输出:
1
2
3
4
</span>


Les options de session

peuvent désormais accepter un paramètre de tableau via session_start( ), Vous pouvez écrire une session à partir de la directive de configuration
<span style="font-size:18px;"><?php
var_dump(intp(10, 3));
?>
以上例程会输出:
int(3)
</span>
dans php.ini. Les paramètres prennent en charge session.lazy_write, read_and_close, cache_limiter, etc.

comme suit : <.>
Nouvelle fonction preg_replace_callback_array()



qui peut mieux fonctionner que preg_replace_callback()

<span style="font-size:18px;"><?php
session_start([
    &#39;cache_limiter&#39; => &#39;private&#39;,
    &#39;read_and_close&#39; => true,
]);
?>
</span>

random_bytes nouvellement ajouté( ) et random_int() deux fonctions


Veuillez consulter ce qui suit pour une utilisation spécifique :

random_bytes()
random_int()


list() ne prend plus en charge le déballage automatique de avant que
list ne fournisse aucune garantie pour objets d'exploitation qui implémentent ArrayAccess , maintenant ce problème a été résolu

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