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

Jetons un coup d'œil aux nouvelles fonctionnalités de php7

coldplay.xixi
Libérer: 2023-02-17 16:06:01
avant
3482 Les gens l'ont consulté

Jetons un coup d'œil aux nouvelles fonctionnalités de php7

1. Type scalaire PHP et déclaration du type de valeur de retour

2. Opérateur de fusion PHP NULL

3. symbole de comparaison combiné)

4. Tableau constant PHP

5. Classe anonyme PHP

6. PHP Closure::call()

7 , PHP. filter unserialize()

8, PHP IntlChar()

9, PHP CSPRNG

10, exception PHP 7

11, PHP 7 use Statement

12. Gestion des erreurs PHP 7

13. Fonction PHP intp()

14. Option de session PHP 7

15. >

16. Extensions supprimées par PHP 7

17. SAPI supprimée par PHP 7

Type scalaire PHP et déclaration de type de valeur de retour

  • Déclaration de type scalaire

    Mode forcé

declare(strict_types=1)
  <?php 
// 强制模式 
function sum(int ...$ints) 
{ 
   return array_sum($ints); 
} 
print(sum(2, &#39;3&#39;, 4.1)); 
?>

以上程序执行输出结果为:

9复制代码
Copier après la connexion
  • Mode strict

<?php 

declare(strict_types=1); 

function sum(int ...$ints) 
{ 
   return array_sum($ints); 
} 

print(sum(2, &#39;3&#39;, 4.1)); 
?>
以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:

PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……复制代码
Copier après la connexion
Opérateur de coalescence PHP NULL

  • Opération ternaire précédente

  $site = isset($_GET['site']) ? $_GET['site'] : '菜鸟教程';复制代码
Copier après la connexion
  • L'opérateur de fusion actuel

  $site = $_GET['site'] ?? '菜鸟教程';复制代码
Copier après la connexion
  • Les 2 méthodes ci-dessus sont les mêmes

  • Voici des exemples :

    <?php
// 获取 $_GET[&#39;site&#39;] 的值,如果不存在返回 &#39;高压锅&#39;$site = $_GET[&#39;site&#39;] ?? &#39;高压锅&#39;;print($site);print(PHP_EOL); // PHP_EOL 为换行符


// 以上代码等价于$site = isset($_GET[&#39;site&#39;]) ? $_GET[&#39;site&#39;] : &#39;高压锅&#39;;print($site);print(PHP_EOL);
// ?? 链$site = $_GET[&#39;site&#39;] ?? $_POST[&#39;site&#39;] ?? &#39;高压锅&#39;;print($site);
?>复制代码
Copier après la connexion
Opérateur de comparaison combiné, également connu sous le nom d'opérateur de vaisseau spatial

L'opérateur de vaisseau spatial nouvellement ajouté PHP 7 (l'opérateur de comparaison combiné) est utilisé pour comparer deux expressions $a et $b Si $a est inférieur, égal ou supérieur à $b, il renvoie respectivement -1, 0 ou 1.

Ce qui suit est un exemple

<?php
// 整型比较print( 1 <=> 1);print(PHP_EOL);print( 1 <=> 2);print(PHP_EOL);print( 2 <=> 1);print(PHP_EOL);print(PHP_EOL); // PHP_EOL 为换行符

// 浮点型比较print( 1.5 <=> 1.5);print(PHP_EOL);print( 1.5 <=> 2.5);print(PHP_EOL);print( 2.5 <=> 1.5);print(PHP_EOL);print(PHP_EOL);

// 字符串比较print( "a" <=> "a");print(PHP_EOL);print( "a" <=> "b");print(PHP_EOL);print( "b" <=> "a");print(PHP_EOL);
?>复制代码
Copier après la connexion
    以上结果分别为复制代码
Copier après la connexion
0
-1
1

0
-1
1

0
-1
1复制代码
Copier après la connexion
Tableau de constantes PHP

  • Les tableaux de constantes précédemment définis ne peuvent avoir que

    const;

  • Maintenant, pour définir un tableau constant, vous pouvez utiliser

    define();

Ce qui suit est un exemple :

// 使用 define 函数来定义数组
define('sites', [   'Google',   'Runoob',   'Taobao']);print(sites[1]);
?>
以上程序执行输出结果为:

Runoob复制代码
Copier après la connexion
Classe anonyme PHP

  • PHP 7 prend en charge l'instanciation d'une classe anonyme via une nouvelle classe, qui peut être utilisée pour remplacer certains "après utilisation" La définition complète de classe de "brûler".

  • Ce qui suit est un exemple :

        <?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; 
        // 使用 new class 创建匿名类 
        $app->setLogger(new class implements Logger { 
           public function log(string $msg) { 
              print($msg); 
           } 
        }); 

        $app->getLogger()->log("我的第一条日志"); 
        ?>
以上程序执行输出结果为:

我的第一条日志复制代码
Copier après la connexion
php Closure::call()

  • PHP 7 Le

    a de meilleures performances, liant dynamiquement une fonction de fermeture à une nouvelle instance d'objet et appelant et exécutant la fonction. Closure::call()

实例
<?php 
class A { 
    private $x = 1; 
} 

// PHP 7 之前版本定义闭包函数代码 
$getXCB = function() { 
    return $this->x; 
}; 

// 闭包函数绑定到类 A 上 
$getX = $getXCB->bindTo(new A, 'A');  

echo $getX(); 
print(PHP_EOL); 

// PHP 7+ 代码 
$getX = function() { 
    return $this->x; 
}; 
echo $getX->call(new A); 
?>
以上程序执行输出结果为:
1
1复制代码
Copier après la connexion
PHP filter unserialize()

  • PHP 7 ajoute une fonctionnalité qui peut fournir un filtrage pour

    afin d'empêcher le codage de données illégales L'injection permet une désérialisation plus sûre des données. unserialize()

  • 实例
    <?php 
    class MyClass1 {  
       public $obj1prop;    
    } 
    class MyClass2 { 
       public $obj2prop; 
    } 
    
    
    $obj1 = new MyClass1(); 
    $obj1->obj1prop = 1; 
    $obj2 = new MyClass2(); 
    $obj2->obj2prop = 2; 
    
    $serializedObj1 = serialize($obj1); 
    $serializedObj2 = serialize($obj2); 
    
    // 默认行为是接收所有类 
    // 第二个参数可以忽略 
    // 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象 
    $data = unserialize($serializedObj1 , ["allowed_classes" => true]); 
    
    // 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2 
    $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]); 
    
    print($data->obj1prop); 
    print(PHP_EOL); 
    print($data2->obj2prop); 
    ?>
    以上程序执行输出结果为:
    1
    2复制代码
    Copier après la connexion
Notez que les fonctionnalités ci-dessus ont une sélection de paramètres supplémentaires dans

unserialize()allowed_classes

PHP CSPRNG Générateur de nombres pseudo-aléatoires

  • CSPRNG (Cryptographically Secure Pseudo-Random Number Generator, générateur de nombres pseudo-aléatoires).

  • PHP 7 fournit un mécanisme simple pour générer des nombres aléatoires cryptographiquement forts en introduisant plusieurs fonctions CSPRNG.

random_bytes() - Chaîne pseudo-aléatoire protégée cryptographiquement.

random_int() - Entier pseudo-aléatoire protégé cryptographiquement.

  • En résumé, c'est similaire à l'original

    et 'mt_rand()' sauf que maintenant random_bytes() génère une chaîne aléatoire rand()

    ;
Exceptions PHP7

  • Les exceptions PHP 7 sont utilisées pour la compatibilité ascendante et l'amélioration des anciennes

    fonctions. Il permet des assertions sans coût dans les environnements de production et offre la possibilité de générer des exceptions et des erreurs personnalisées. assert()

  • Les anciennes versions de l'API continueront d'être maintenues à des fins de compatibilité.

  • assert() est désormais 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.

  • assert()的应用  跟assert_option() 配合复制代码
    Copier après la connexion
Type de paramètre également

**参数**
assertion
断言。在 PHP 5 中,是一个用于执行的字符串或者用于测试的布尔值。在 PHP 7 中,可以是一个返回任何值的表达式, 它将被执行结果用于指明断言是否成功。
description
如果 assertion 失败了,选项 description 将会包括在失败信息里。
exception
在 PHP 7 中,第二个参数可以是一个 Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出

实例
将 zend.assertions 设置为 0:
实例
<?php 
ini_set(&#39;zend.assertions&#39;, 0); 

assert(true == false); 
echo &#39;Hi!&#39;; 
?>
以上程序执行输出结果为:
Hi!
将 zend.assertions 设置为 1,assert.exception 设置为 1:
实例
<?php 
ini_set(&#39;zend.assertions&#39;, 1); 
ini_set(&#39;assert.exception&#39;, 1); 

assert(true == false); 
echo &#39;Hi!&#39;; 
?>
以上程序执行输出结果为:
Fatal error: Uncaught AssertionError: assert(true == false) in -:2
Stack trace:#0 -(2): assert(false, &#39;assert(true == ...&#39;)#1 {main}
  thrown in - on line 2复制代码
Copier après la connexion

PHP 7 use 语句

  • PHP 7 可以使用一个 use 从同一个 namespace 中导入类、函数和常量:

// PHP 7 之前版本需要使用多次 use 
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 导入同一个 namespace 的类 
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

推荐教程:《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:juejin.im
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