Maison >développement back-end >Problème PHP >Parlons des connaissances liées à la conversion de type étendue PHP7+

Parlons des connaissances liées à la conversion de type étendue PHP7+

PHPz
PHPzoriginal
2023-04-21 10:06:59652parcourir

Avec le développement du langage PHP, PHP7 a été grandement amélioré en termes de performances et de sécurité. Parmi elles, la fonction de conversion de type étendue est une fonction très pratique, qui peut rendre le code plus concis et efficace. Cet article présentera les connaissances pertinentes sur la conversion de type étendue PHP7+.

1. Présentation

La conversion de type étendue fait référence à la conversion d'un type de données en un autre type de données. Avant PHP7, nous utilisions généralement une série de fonctions pour convertir les types de données, telles que intval(), floatval(), strval(), boolval(), etc. Mais il y a encore quelques problèmes avec ces fonctions :

  1. les noms de fonctions ne sont pas faciles à retenir ;
  2. les fonctions provoquent parfois des problèmes de verbosité et de lisibilité du code ;
  3. les appels de fonctions provoquent parfois des erreurs étranges.

Afin de résoudre ces problèmes, PHP7 introduit une fonction de conversion de type étendue, qui peut effectuer une conversion de type via un nouveau sucre syntaxique.

2. Utilisation de base

En PHP7, nous pouvons utiliser le sucre syntaxique suivant pour la conversion de type :

  1. (int) $var : Convertir $var en type entier
  2. (float) $var : Convertir $var Convertir ; en type à virgule flottante ;
  3. (string) $var : convertit $var en type de chaîne ;
  4. (bool) $var : convertit $var en valeur booléenne.

Voici quelques exemples d'utilisation du sucre de syntaxe pour la conversion de type :

<?php
    $a = "123";
    $b = (int) $a;
    echo gettype($b); // 输出:integer
    
    $c = 3.14;
    $d = (string) $c;
    echo gettype($d); // 输出:string
    
    $e = "true";
    $f = (bool) $e;
    echo gettype($f); // 输出:boolean
?>

En tant que langage dynamique, les types de données de PHP sont déterminés au moment de l'exécution, ces sucres de syntaxe de conversion de type étendus sont donc très utiles dans des situations appropriées. Cette section fournit quelques exemples simples pour illustrer ce point.

3. Étude approfondie

En PHP7, la fonction de conversion de type étendue peut non seulement convertir des types de données de base, mais également convertir certains types de données spéciaux.

  1. Conversion de tableau

Lorsque nous devons convertir un tableau en chaîne, utiliser la fonction implode() est toujours un bon choix. Mais cela peut également être réalisé en utilisant la fonction de conversion de type étendue :

<?php
    $arr = array("hello", "world");
    $str1 = implode(&#39;,&#39;, $arr);
    $str2 = (string) $arr;
    echo $str1."n".$str2;
?>

Résultat de sortie :

hello,world
Array

Lorsque vous utilisez la syntaxe de conversion de type étendue sugar pour convertir un tableau en chaîne, le résultat de sortie est Array, ce qui n'est pas ce que nous voulons . La solution à ce problème consiste à utiliser la fonction __toString(), qui convertit le tableau en objet.

<?php
    class A {
        private $arr = array("hello", "world");
        public function __toString() {
            return implode(&#39;,&#39;, $this->arr);
        }
    }
    $a = new A();
    echo (string) $a;
?>

Résultat de sortie :

hello,world
  1. Conversion d'objet

En plus des tableaux, nous pouvons également convertir des objets en différents types de données en utilisant du sucre syntaxique de conversion de type étendu. Voici quelques exemples :

<?php
    class Test {
        private $var = "hello,world";
        public function __toString() {
            return $this->var;
        }
        public function __toInt() {
            return (int) $this->var;
        }
        public function __toFloat() {
            return (float) $this->var;
        }
        public function __toArray() {
            return array($this->var);
        }
    }
    $t = new Test();
    echo (string) $t; // 输出:hello,world
    echo (int) $t; // 输出:0
    echo (float) $t; // 输出:0
    print_r((array) $t); // 输出:Array ( [0] => hello,world )
?>

Tout d'abord, si nous regardons l'exemple ci-dessus, nous constaterons que quatre méthodes __toString(), __toInt(), __toFloat() et __toArray() sont définies dans la classe Test. Ces méthodes sont au cœur de l'extension de la fonction de conversion de type, nous devons donc les définir pour implémenter de nouvelles méthodes de conversion de type de données.

Dans le code ci-dessus, lorsque nous convertissons l'objet Test en un type chaîne, la méthode __toString() sera automatiquement appelée et la chaîne correspondante sera renvoyée. De même, lorsqu'un objet est converti en type entier ou à virgule flottante, la méthode __toInt() ou __toFloat() est automatiquement appelée pour la conversion. Lorsqu'un objet est converti en type tableau, la méthode __toArray() est automatiquement appelée.

Lorsque vous utilisez la conversion de type étendue, portez une attention particulière à l'ordre de conversion de type. Par exemple, si nous appelons (int) $t, mais que $t ne définit pas la méthode __toInt(), la méthode __toString() est automatiquement appelée. Et si la méthode __toString() n'est pas définie, 0 sera renvoyé.

4. Résumé

La conversion de type étendue est une nouvelle fonctionnalité très pratique de PHP7, qui peut rendre le code plus concis et efficace. Lorsque vous utilisez la conversion de type étendue, vous devez faire attention à la séquence de conversion de type et à la mise en œuvre de la méthode de conversion de type. De plus, la conversion de type étendue peut également être étendue aux types de données auto-définis, apportant plus de commodité au développement de notre code.

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