Maison > développement back-end > PHP7 > Parlons de la compréhension et de la comparaison des nouvelles fonctionnalités de php7

Parlons de la compréhension et de la comparaison des nouvelles fonctionnalités de php7

coldplay.xixi
Libérer: 2023-02-17 16:00:02
avant
2511 Les gens l'ont consulté

Parlons de la compréhension et de la comparaison des nouvelles fonctionnalités de php7

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 le fera renvoie-le Le deuxième opérande.

//php7以前  if判断if(empty($_GET['param'])) {
      $param = 1;
}else{
    $param = $_GET['param'];
}//php7以前  三元运算符$param = empty($_GET['param']) ? 1 : $_GET['param'];//PHP7  null合并运算符$param = $_GET['param'] ?? 1;//1
Copier après la connexion

define() définit un tableau constant

//php7以前define("CONTENT", "hello world");echo CONTENT;//hello world//PHP7define('ANIMALS', [    'dog',    'cat',    'bird']);echo ANIMALS[2];//bird//PHP7 类外也可使用const来定义常量const CONSTANT = 'Hello World'; 
echo CONSTANT;//Hello World
Copier après la connexion

opérateur de comparaison de combinaison (<=>)

l'opérateur de comparaison de combinaison est utilisé pour comparer deux Une expression. Lorsque a est inférieur, égal ou supérieur à b, il renvoie respectivement -1, 0 ou 1. Le principe de la comparaison est de suivre les règles générales de comparaison de PHP.

//整数echo 1 <=> 1; // 0echo 1 <=> 2; // -1echo 2 <=> 1; // 1//浮点数echo 1.5 <=> 1.5; // 0echo 1.5 <=> 2.5; // -1echo 2.5 <=> 1.5; // 1
 //字符串echo "a" <=> "a"; // 0echo "a" <=> "b"; // -1echo "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

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

Déclaration de type de valeur de retour

Ajouter 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 : tapez le nom 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+&#39;2.5&#39;;5 }6 print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer
Copier après la connexion

Classe anonyme

Autorise la création d'une nouvelle classe {}. un objet anonyme.

<?php//php7以前 接口实现interface User{    public function getDiscount();
}class VipUser implements User{    //折扣系数
    private $discount = 0.6;    public function getDiscount() {        return $this->discount;
    }
}class Goods{    private $price = 200;    private $objectVipUser;    //User接口VipUser类实现
    public function getUserData(User $User){        $this->objectVipUser = $User;
        $discount = $this->objectVipUser->getDiscount();        echo "商品价格:".$this->price*$discount;
    }
}
$display = new Goods();//常规实例化接口实现对象$display->getUserData(new VipUser);//商品价格:120
Copier après la connexion
<?php//php7 创建一个匿名的对象interface User{    public function getDiscount();
}class Goods{    private $price = 200;    private $objectVipUser;    public function getUserData($User){        $this->objectVipUser = $User;
        $discount = $this->objectVipUser->getDiscount();        echo "商品价格:".$this->price*$discount;
    }
}
$display = new Goods();//new匿名对象实现user接口$display->getUserData(new class implements User{    private $discount = 0.6;    public function getDiscount() {        return $this->discount;
    }
});//商品价格:120
Copier après la connexion

Closure::call()

La méthode Closure::call() a été ajoutée comme moyen court de lier temporairement la portée d'un objet à une fermeture et de l'appeler par rapport. au bindTo de PHP5. Ses performances sont beaucoup plus rapides. 🎜>IntlChar

IntlChar : donne accès à certaines méthodes utilitaires qui peuvent être utilisées pour accéder aux informations sur les caractères Unicode REMARQUE : l'extension Intl doit être installée pour pouvoir être utilisée !

<?php//php7以前class A {    private  $attribute = &#39;hello world&#39;;
}

$getClosure = function(){    return $this->attribute;
};

$getAttribute = $getClosure->bindTo(new A, &#39;A&#39;);//中间层闭包echo $getAttribute();//hello world
Copier après la connexion

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

random_int() - Entiers pseudo-aléatoires protégés cryptographiquement.

<?php//PHP7class A {    private  $attribute = &#39;hello world&#39;;
}

$getClosure = function(){    return $this->attribute;
};echo $getClosure->call(new A);//hello world
Copier après la connexion

instruction use

Une instruction à usage unique peut être utilisée pour importer des classes, des fonctions et des constantes à partir du même espace de noms, au lieu d'utiliser plusieurs instructions à usage.

<?php class A{  
   public $name = &#39;admin_a&#39;;    
} 
class B{ 
   public $name = &#39;admin_b&#39;; 
} 

$objA = new A(); 
$objB = new B(); 

$serializedObjA = serialize($objA); 
$serializedObjB = serialize($objB); 


//默认行为是接收所有类; 第二个参数可以忽略$dataA = unserialize($serializedObjA , ["allowed_classes" => true]); 
var_dump($dataA);//object(A)#3 (1) { ["name"]=> string(7) "admin_a" }//如果allowed_classes设置为false,unserialize会将所有对象转换为__PHP_Incomplete_Class对象 $dataA = unserialize($serializedObjA , ["allowed_classes" => false]); 
var_dump($dataA);//object(__PHP_Incomplete_Class)#4 (2) { ["__PHP_Incomplete_Class_Name"]=> string(1) "A" ["name"]=> string(7) "admin_a" }//转换所有对象到 __PHP_Incomplete_Class对象,除了对象"B"$dataB = unserialize($serializedObjB , ["allowed_classes" => ["B"]]); 
var_dump($dataB);//object(B)#3 (1) { ["name"]=> string(7) "admin_b" }
Copier après la connexion

intp

La fonction intp() 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 var_dump(IntlChar::CODEPOINT_MAX);//int(1114111) 2 echo &#39;<br>&#39;;3 var_dump(IntlChar::charName(&#39;+&#39;));//string(9) "PLUS SIGN" 4 echo &#39;<br>&#39;;5 var_dump(IntlChar::ispunct(&#39;?&#39;));//bool(true)
Copier après la connexion

Gestion des erreurs PHP7

PHP7 a changé la façon dont la plupart des erreurs sont signalées. Contrairement au mécanisme de rapport d'erreurs traditionnel de PHP5, la plupart des erreurs sont désormais générées en tant qu'exceptions d'erreur.

Cette exception d'erreur peut être détectée par un essai. /catch bloc comme une exception normale. S'il n'y a pas de bloc try/catch correspondant, la fonction de gestion des exceptions (enregistrée par set_exception_handler()) est appelée pour le traitement.

Si la fonction de gestion des exceptions n'a pas été enregistrée, elle est gérée. de manière traditionnelle : elle est signalée comme une erreur fatale (Fatal Error).

La classe Error n'est pas étendue à partir de la classe Exception, donc le code tel que catch (Exception $e) { ... } ne peut pas être intercepté. à Error. Vous pouvez utiliser du code comme catch (Error $e) { ... }, ou catch Error en enregistrant une fonction de gestion des exceptions (set_exception_handler()).



1 $bytes = random_bytes(8); 
2 echo(bin2hex($bytes));//随机2073a110a2e3c4973 echo &#39;<br>&#39;;4 echo(random_int(1, 999));//随机7865 echo &#39;<br>&#39;;6 print(random_int(-999, -1));//随机-357
Copier après la connexion
rrree
Tutoriel recommandé : "
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!

Étiquettes associées:
source:liqingbo.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