Maison > Article > développement back-end > Comparaison et compréhension des nouvelles fonctionnalités de php7
?? Syntaxe : Si la variable existe et que la valeur n'est pas NULL, elle renverra sa propre valeur, sinon elle renverra c'est 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
//php7以前 define("CONTENT", "hello world"); echo CONTENT;//hello world //PHP7 define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[2];//bird //PHP7 类外也可使用const来定义常量 const CONSTANT = 'Hello World'; echo CONSTANT;//Hello World
L'opérateur de comparaison combiné est utilisé pour comparer deux expressions Lorsque b, il renvoie respectivement -1, 0 ou 1. Le principe de comparaison est de suivre les règles de comparaison régulières de PHP.
//整数 echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 //浮点数 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 //字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1.
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,'3.5'));//5 //严格模式 //模式声明:declare(strict_types=1); 默认情况值为0,值为1代表为严格校验的模式 declare(strict_types=1); function add(int $a,int $b){ return $a+$b; } var_dump(add(2,'3.5')); //Fatal error: Uncaught TypeError: Argument 2 passed to add() must be of the type integer.
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).
//有效的返回类型 declare(strict_types = 1); function getInt(int $value): int { return $value; } print(getInt(6));//6
//无效返回类型 declare(strict_types = 1); function getNoInt(int $value): int { return $value+'2.5'; } print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer
Permet à la nouvelle classe {} de créer 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
<?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
La méthode Closure::call() a été ajoutée comme moyen court de lier temporairement une portée d'objet à une fermeture et de l'appeler. Ses performances sont plus rapides que celles de bindTo de PHP5.
<?php //php7以前 class A { private $attribute = 'hello world'; } $getClosure = function(){ return $this->attribute; }; $getAttribute = $getClosure->bindTo(new A, 'A');//中间层闭包 echo $getAttribute();//hello worldrrree
La fonction unserialize() : la fonction de filtrage peut empêcher l'injection de code de données illégales et fournit une réponse plus sûre. Données sérialisées
<?php //PHP7 class A { private $attribute = 'hello world'; } $getClosure = function(){ return $this->attribute; }; echo $getClosure->call(new A);//hello world
IntlChar : donne accès à certaines méthodes pratiques 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 class A{ public $name = 'admin_a'; } class B{ public $name = 'admin_b'; } $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" }
La fonction CSPRNG fournit un mécanisme simple pour générer des nombres aléatoires pour les mots de passe.
random_bytes() - Un pseudo protégé par cryptographie. -random string.
Random_int() - Un entier pseudo-aléatoire protégé cryptographiquement.
var_dump(IntlChar::CODEPOINT_MAX);//int(1114111) echo '<br>'; var_dump(IntlChar::charName('+'));//string(9) "PLUS SIGN" echo '<br>'; var_dump(IntlChar::ispunct('?'));//bool(true)
Vous pouvez utiliser une seule. use pour importer des classes, des fonctions et des constantes à partir du même espace de noms au lieu d'utiliser plusieurs instructions use
$bytes = random_bytes(8); echo(bin2hex($bytes));//随机2073a110a2e3c497 echo '<br>'; echo(random_int(1, 999));//随机786 echo '<br>'; print(random_int(-999, -1));//随机-357
La fonction intdiv() nouvellement ajoutée reçoit. 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.
//PHP7之前 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; // PHP7之后 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};
PHP7 a modifié le manière 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 traitée comme une exception normale interceptée par un bloc try/catch. correspondant au bloc try/catch, 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 : signalée comme fatale. error (Fatal Error).
La classe Error n'est pas étendue à partir de la classe Exception, donc un code comme catch (Exception $e) { ... } ne peut pas attraper Error . e) { ... } ,
ou en enregistrant une fonction de gestion des exceptions (set_exception_handler()) pour détecter l'erreur.
echo intdiv(8,4);//2 echo intdiv(10,4);//2 echo intdiv(5,10);//0rrree
Pour plus d'informations sur PHP connaissances, veuillez visiter le site Web PHP chinois !
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!