Table des matières
1.opérateur de fusion null (??)
2. definition() définit le tableau constant
3. Opérateurs de comparaison combinés (<=>)
4. Déclaration de type de variable
5. Déclaration de type de valeur de retour
6. Classe anonyme
7. ()
8. unserialize()
9. IntlChar
10. CSPRNG
11. instruction d'utilisation
12 intdiv
13 Gestion des erreurs PHP7
Maison développement back-end Problème PHP Comparaison et compréhension des nouvelles fonctionnalités de php7

Comparaison et compréhension des nouvelles fonctionnalités de php7

Oct 14, 2019 pm 12:01 PM
php7 新特性

1.opérateur de fusion null (??)

?? 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[&#39;param&#39;])) {
      $param = 1;
}else{
    $param = $_GET[&#39;param&#39;];
}
//php7以前  三元运算符
$param = empty($_GET[&#39;param&#39;]) ? 1 : $_GET[&#39;param&#39;];
//PHP7  null合并运算符
$param = $_GET[&#39;param&#39;] ?? 1;//1
Copier après la connexion

2. definition() définit le tableau constant

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

3. Opérateurs de comparaison combinés (<=>)

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
Copier après la connexion
.

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

5. 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).

//有效的返回类型
declare(strict_types = 1);
function getInt(int $value): int {
  return $value;
}
print(getInt(6));//6
Copier après la connexion
//无效返回类型
declare(strict_types = 1);
function getNoInt(int $value): int {
  return $value+&#39;2.5&#39;;
}
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.

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

7. ()

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 = &#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
rrree

8. unserialize()

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 = &#39;hello world&#39;;
}
$getClosure = function(){
    return $this->attribute;
};
echo $getClosure->call(new A);//hello world
Copier après la connexion

9. IntlChar

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 = &#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

10. CSPRNG

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 &#39;<br>&#39;;
var_dump(IntlChar::charName(&#39;+&#39;));//string(9) "PLUS SIGN" 
echo &#39;<br>&#39;;
var_dump(IntlChar::ispunct(&#39;?&#39;));//bool(true)
Copier après la connexion

11. instruction d'utilisation

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 &#39;<br>&#39;;
echo(random_int(1, 999));//随机786
echo &#39;<br>&#39;;
print(random_int(-999, -1));//随机-357
Copier après la connexion

12 intdiv

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};
Copier après la connexion

13 Gestion des erreurs PHP7

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.

Comparaison et compréhension des nouvelles fonctionnalités de php7

echo intdiv(8,4);//2
echo intdiv(10,4);//2
echo intdiv(5,10);//0
Copier après la connexion
rrree

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!

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines 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)

Que dois-je faire si le plug-in est installé dans php7.0 mais qu'il indique toujours qu'il n'est pas installé ? Que dois-je faire si le plug-in est installé dans php7.0 mais qu'il indique toujours qu'il n'est pas installé ? Apr 02, 2024 pm 07:39 PM

Pour résoudre le problème du plugin n'affichant pas installé dans PHP 7.0 : Vérifiez la configuration du plugin et activez le plugin. Redémarrez PHP pour appliquer les modifications de configuration. Vérifiez les autorisations du fichier du plugin pour vous assurer qu'elles sont correctes. Installez les dépendances manquantes pour garantir le bon fonctionnement du plugin. Si toutes les autres étapes échouent, reconstruisez PHP. D'autres causes possibles incluent des versions de plugin incompatibles, le chargement d'une mauvaise version ou des problèmes de configuration PHP.

Sortie de PHP 8.3 : aperçu des nouvelles fonctionnalités Sortie de PHP 8.3 : aperçu des nouvelles fonctionnalités Nov 27, 2023 pm 12:52 PM

Sortie de PHP8.3 : aperçu des nouvelles fonctionnalités À mesure que la technologie continue de se développer et que les besoins évoluent, les langages de programmation sont constamment mis à jour et améliorés. En tant que langage de script largement utilisé dans le développement Web, PHP s'est constamment amélioré pour offrir aux développeurs des outils plus puissants et plus efficaces. La version PHP 8.3 récemment publiée apporte de nombreuses nouvelles fonctionnalités et améliorations tant attendues. Jetons un coup d'œil à ces nouvelles fonctionnalités. Initialisation des propriétés non nulles Dans les versions précédentes de PHP, si une propriété de classe ne se voyait pas explicitement attribuer une valeur, sa valeur

Un guide pour découvrir les nouvelles fonctionnalités de PHP8 et acquérir une compréhension approfondie des dernières technologies Un guide pour découvrir les nouvelles fonctionnalités de PHP8 et acquérir une compréhension approfondie des dernières technologies Dec 23, 2023 pm 01:16 PM

Une analyse approfondie des nouvelles fonctionnalités de PHP8 pour vous aider à maîtriser les dernières technologies Au fil du temps, le langage de programmation PHP n'a cessé d'évoluer et de s'améliorer. La version PHP8 récemment publiée offre aux développeurs de nombreuses nouvelles fonctionnalités et améliorations intéressantes, apportant plus de commodité et d'efficacité à notre travail de développement. Dans cet article, nous analyserons en profondeur les nouvelles fonctionnalités de PHP8 et fournirons des exemples de code spécifiques pour vous aider à mieux maîtriser ces dernières technologies. Le compilateur JIT PHP8 introduit la compilation JIT (Just-In-Time)

Guide FAQ de l'environnement serveur PHP : résoudre rapidement les problèmes courants Guide FAQ de l'environnement serveur PHP : résoudre rapidement les problèmes courants Apr 09, 2024 pm 01:33 PM

Les solutions courantes pour les environnements de serveur PHP consistent à s'assurer que la version correcte de PHP est installée et que les fichiers pertinents ont été copiés dans le répertoire du module. Désactivez SELinux temporairement ou définitivement. Vérifiez et configurez PHP.ini pour vous assurer que les extensions nécessaires ont été ajoutées et configurées correctement. Démarrez ou redémarrez le service PHP-FPM. Vérifiez les paramètres DNS pour les problèmes de résolution.

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Mar 31, 2025 pm 11:54 PM

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Quelles sont les nouvelles fonctionnalités de php8 Quelles sont les nouvelles fonctionnalités de php8 Sep 25, 2023 pm 01:34 PM

Les nouvelles fonctionnalités de php8 incluent le compilateur JIT, la déduction de type, les paramètres nommés, les types d'union, les propriétés, les améliorations de la gestion des erreurs, la prise en charge de la programmation asynchrone, les nouvelles fonctions de bibliothèque standard et les extensions de classe anonymes. Introduction détaillée : 1. Compilateur JIT, PHP8 introduit le compilateur JIT, ce qui constitue une amélioration importante des performances. Le compilateur JIT peut compiler et optimiser certains codes d'exécution à haute fréquence en temps réel, améliorant ainsi la vitesse d'exécution. 2. Dérivation de type, PHP8 ; introduit la fonction d'inférence de type, permettant aux développeurs de déduire automatiquement le type de variables lors de la déclaration des variables, etc.

Lequel est le meilleur, php8 ou php7 ? Lequel est le meilleur, php8 ou php7 ? Nov 16, 2023 pm 03:09 PM

Par rapport à PHP7, PHP8 présente certains avantages et améliorations en termes de performances, de nouvelles fonctionnalités et améliorations de la syntaxe, du système de types, de la gestion des erreurs et des extensions. Cependant, le choix de la version à utiliser dépend de vos besoins spécifiques et des circonstances du projet. Introduction détaillée : 1. Amélioration des performances, PHP8 introduit le compilateur Just-in-Time (JIT), qui peut améliorer la vitesse d'exécution du code ; 2. Nouvelles fonctionnalités et améliorations de la syntaxe, PHP8 prend en charge la déclaration des paramètres nommés et des paramètres facultatifs, création de fonctions L'appel est plus flexible ; des classes anonymes, des déclarations de propriétés de type, etc. sont introduites.

Pourquoi une erreur se produit-elle lors de l'installation d'une extension à l'aide de PECL dans un environnement Docker? Comment le résoudre? Pourquoi une erreur se produit-elle lors de l'installation d'une extension à l'aide de PECL dans un environnement Docker? Comment le résoudre? Apr 01, 2025 pm 03:06 PM

Causes et solutions pour les erreurs Lors de l'utilisation de PECL pour installer des extensions dans un environnement Docker Lorsque nous utilisons un environnement Docker, nous rencontrons souvent des maux de tête ...

See all articles