Maison développement back-end PHP7 Comprendre et comparer les nouvelles fonctionnalités de php7

Comprendre et comparer les nouvelles fonctionnalités de php7

Jan 29, 2021 am 09:35 AM

Comprendre et comparer les nouvelles fonctionnalités de php7

Recommandé (gratuit) : PHP7

1. opérateur de coalescence nul (??)

?? Syntaxe : Si la variable existe et que la valeur n'est pas NULL, elle renverra sa propre valeur, sinon elle renverra son deuxième opérande.

 1 //php7以前  
 if判断 
 2 if(empty($_GET['param'])) { 
 3       $param = 1; 
 4 }else{ 
 5     $param = $_GET['param']; 
 6 } 7  
 8 //php7以前  三元运算符 
 9 $param = empty($_GET['param']) ? 1 : $_GET['param'];10 
 11 //PHP7  null合并运算符12 $param = $_GET['param'] ?? 1;//1
Copier après la connexion

2. Définir() définit un tableau constant

 1 //php7以前 
 2 define("CONTENT", "hello world"); 
 3 echo CONTENT;//hello world 4  
 5 //PHP7 6 define('ANIMALS', [ 
 7     'dog', 
 8     'cat', 
 9     'bird'
 10 ]);
 11 echo ANIMALS[2];//bird12 
 13 //PHP7 类外也可使用const来定义常量
 14 const CONSTANT = 'Hello World'; 
15 echo CONSTANT;//Hello World
Copier après la connexion

3. >)

L'opérateur de comparaison combiné est utilisé pour comparer deux expressions. Il renvoie lorsque $a est inférieur, égal ou supérieur à $. b respectivement -1, 0 ou 1. Le principe de comparaison est basé sur les règles générales de comparaison de PHP.

 1 //整数 
 2 echo 1 <=> 1; // 0 
 3 echo 1 <=> 2; // -1 
 4 echo 2 <=> 1; // 1 5  
 6 //浮点数 7 echo 1.5 <=> 1.5; // 0 
 8 echo 1.5 <=> 2.5; // -1 
 9 echo 2.5 <=> 1.5; // 1 
 11 //字符串12 echo "a" <=> "a"; // 0
 13 echo "a" <=> "b"; // -1
 14 echo "b" <=> "a"; // 1
Copier après la connexion

Déclaration de type de variable

Deux modes : obligatoire (par défaut) et mode strict Les paramètres de type suivants peuvent être utilisés : string, int, float, bool

 1 //... 操作符: 表示这是一个可变参数. php5.6及以上的版本可使用: 函数定义的时候变量前使用. 
 2 function intSum(int ...$ints){ 
 3     return array_sum($ints); 
 4 } 
 5 var_dump(intSum(2,'3.5'));//5 
 6  
 7 //严格模式 
 8 //模式声明:declare(strict_types=1);  默认情况值为0,值为1代表为严格校验的模式  
 9 declare(strict_types=1);
 10 function add(int $a,int $b){
 11     return $a+$b;
 12 }
 13 var_dump(add(2,'3.5')); //Fatal error: Uncaught TypeError: Argument 2 passed to add() must be of the type integer
Copier après la connexion

. 5. Déclaration de type de valeur de retour

Ajoute la prise en charge de la déclaration de type de retour Semblable à la déclaration de type de paramètre (Pour l'utilisation, ajoutez : le nom du type après la définition de la fonction).

1 //有效的返回类型
2 declare(strict_types = 1);
3 function getInt(int $value): int {
4   return $value;
5 }
6 print(getInt(6));//6
Copier après la connexion
1 //无效返回类型
2 declare(strict_types = 1);
3 function getNoInt(int $value): int {
4   return $value+'2.5';
5 }
6 print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer
Copier après la connexion

6. Classe anonyme

permet à la nouvelle classe {} de créer un objet anonyme.

 1 <?php 
 2 //php7以前 接口实现 
 3 interface User{ 
 4     public function getDiscount(); 
 5 } 
 6 class VipUser implements User{ 
 7     //折扣系数 
 8     private $discount = 0.6; 
 9     public function getDiscount() {
 10         return $this->discount;
 11     }
 12 }
 13 class Goods{
 14     private $price = 200;
 15     private $objectVipUser;
 16     //User接口VipUser类实现
 17     public function getUserData($User){
 18         $this->objectVipUser = $User;
 19         $discount = $this->objectVipUser->getDiscount();
 20         echo "商品价格:".$this->price*$discount;
 21     }
 22 }
 23 $display = new Goods();
 24 //常规实例化接口实现对象
 25 $display ->getUserData(new VipUser);//商品价格:120
Copier après la connexion
 1 <?php 
 2 //php7 创建一个匿名的对象 
 3 interface User{ 
 4     public function getDiscount(); 
 5 } 
 6 class Goods{ 
 7     private $price = 200; 
 8 private $objectVipUser; 
 9     public function getUserData($User){
 10         $this->objectVipUser = $User;
 11         $discount = $this->objectVipUser->getDiscount();
 12         echo "商品价格:".$this->price*$discount;
 13     }
 14 }
 15 $display = new Goods();
 16 //new匿名对象实现user接口
 17 $display ->getUserData(new class implements User{
 18     private $discount = 0.6;
 19     public function getDiscount() {
 20         return $this->discount;
 21     }
 22 });//商品价格:120
Copier après la connexion

7. Closure::call()

La méthode Closure::call() a été ajoutée comme un moyen court de lier temporairement un objet Scope à une fermeture et l'appeler par rapport à bindTo de PHP5, ses performances sont beaucoup plus rapides.

 1 <?php 
 2 //php7以前 
 3 class A { 
 4     private  $attribute = &#39;hello world&#39;; 
 5 } 
 6  
 7 $getClosure = function(){ 
 8     return $this->attribute; 
 9 };
 10 
 11 $getAttribute = $getClosure->bindTo(new A, 'A');//中间层闭包
 12 echo $getAttribute();//hello world
Copier après la connexion
 1 <?php 
 2 //PHP7 
 3 class A { 
 4     private  $attribute = &#39;hello world&#39;; 
 5 } 
 6  
 7 $getClosure = function(){ 
 8     return $this->attribute; 
 9 };
 10 
 11 echo $getClosure->call(new A);//hello world
Copier après la connexion

unserialize()

Fonction unserialize() : la fonction de filtrage peut empêcher l'injection de code de données illégales et fournir des données désérialisées plus sûres

 1 <?php 
 2 class A{  
 3    public $name = &#39;admin_a&#39;;    
 4 } 
 5 class B{ 
 6    public $name = &#39;admin_b&#39;; 
 7 } 
 8  9 $objA = new A(); 
10 $objB = new B(); 
11 12 $serializedObjA = serialize($objA); 
13 $serializedObjB = serialize($objB); 
14 15 16 //默认行为是接收所有类; 第二个参数可以忽略17 $dataA = unserialize($serializedObjA , ["allowed_classes" => true]); 
18 var_dump($dataA);//object(A)#3 (1) { ["name"]=> string(7) "admin_a" }19 20 //如果allowed_classes设置为false,unserialize会将所有对象转换为__PHP_Incomplete_Class对象 21 $dataA = unserialize($serializedObjA , ["allowed_classes" => false]); 
22 var_dump($dataA);//object(__PHP_Incomplete_Class)#4 (2) { ["__PHP_Incomplete_Class_Name"]=> string(1) "A" ["name"]=> string(7) "admin_a" }23 24 //转换所有对象到 __PHP_Incomplete_Class对象,除了对象"B"25 $dataB = unserialize($serializedObjB , ["allowed_classes" => ["B"]]); 
26 var_dump($dataB);//object(B)#3 (1) { ["name"]=> string(7) "admin_b" }
Copier après la connexion

9. IntlChar

IntlChar : Fournit certains accès aux méthodes utilitaires pour accéder aux informations sur les caractères Unicode. L'extension Intl doit être installée pour être utilisée !

1 var_dump(IntlChar::CODEPOINT_MAX);//int(1114111) 
2 echo '<br>';
3 var_dump(IntlChar::charName('+'));//string(9) "PLUS SIGN" 
4 echo '<br>';
5 var_dump(IntlChar::ispunct('?'));//bool(true)
Copier après la connexion

10 CSPRNG

La fonction CSPRNG fournit un mécanisme simple pour générer des nombres aléatoires cryptographiques.

random_bytes() - chaîne pseudo-aléatoire protégée par cryptographie.

random_int() - pseudo protégé par cryptographie. -entier aléatoire.

1 $bytes = random_bytes(8); 
2 echo(bin2hex($bytes));//随机2073a110a2e3c497
3 echo '<br>';
4 echo(random_int(1, 999));//随机786
5 echo '<br>';
6 print(random_int(-999, -1));//随机-357
Copier après la connexion

11. instruction d'utilisation

Vous pouvez utiliser une instruction à usage unique pour importer des classes, fonctions et constantes du même espace de noms au lieu d'utiliser plusieurs instructions d'utilisation.

 1 //PHP7之前 
 2 use some\namespace\ClassA; 
 3 use some\namespace\ClassB; 
 4 use some\namespace\ClassC as C; 
 5 use function some\namespace\fn_a; 
 6 use function some\namespace\fn_b; 
 7 use function some\namespace\fn_c; 
 8 use const some\namespace\ConstA; 
 9 use const some\namespace\ConstB;
 10 use const some\namespace\ConstC;
 11 
 12 // PHP7之后
 13 use some\namespace\{ClassA, ClassB, ClassC as C};
 14 use function some\namespace\{fn_a, fn_b, fn_c};
 15 use const some\namespace\{ConstA, ConstB, ConstC};
Copier après la connexion

12. () est nouvellement ajoutée, recevant deux paramètres, et la valeur de retour est la valeur du premier paramètre divisée par le deuxième paramètre et arrondie

1 echo intp(8,4);//2
2 echo intp(10,4);//2
3 echo intp(5,10);//0
Copier après la connexion

<.>13. Gestion des erreurs PHP7

PHP7 改变了大多数错误的报告方式.不同于PHP5的传统错误报告机制,现在大多数错误被作为Error异常抛出.
Copier après la connexion
这种Error异常可以像普通异常一样被try / catch块所捕获. 如果没有匹配的try / catch块,则调用异常处理函数(由 set_exception_handler() 注册)进行处理.
如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error).
Copier après la connexion
Error类并不是从Exception类扩展出来的,所以用catch (Exception $e) { ... } 这样的代码是捕获不到Error的.你可以用 catch (Error $e) { ... } 这样的代码,
或者通过注册异常处理函数( set_exception_handler())来捕获Error.
Copier après la connexion

 1 <?php 
 2 //php7以前 自定义异常处理 
 3 class getException extends Exception{ 
 4     public function errorMsg(){ 
 5         return &#39;错误的信息&#39;.$this->getMessage().'<br>错误的代码'.$this->getCode(); 
 6     } 
 7 } 
 8  
 9 try {
 10     $num =10;
 11     if($num > 1) {
 12         throw new getException($num,404);
 13     }
 14 } catch (getException $e) {
 15     echo $e->errorMsg();
 16 }
Copier après la connexion
1 <?php  
2 //php7 异常处理
3 try {
4     test();
5 }catch(Error $e) {
6     echo $e->getMessage();//Call to undefined function test()
7 }
Copier après la connexion

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)