Maison >développement back-end >tutoriel php >Pièges 2 que PHP peut rencontrer

Pièges 2 que PHP peut rencontrer

小云云
小云云original
2018-03-19 15:00:351274parcourir

Plus tôt, nous avons partagé avec vous le piège 1 dans lequel PHP peut tomber. Dans cet article, nous partagerons avec vous le piège 2 dans lequel PHP peut tomber. Nous espérons que cela pourra aider tout le monde.

Certains des pièges que j'ai rencontrés dans le processus de développement actuel de PHP étaient causés par mon manque de compréhension. Quand je suis arrivé au fond des choses, j'ai vraiment fondu en larmes.

Concernant la comparaison des entiers et des chaînes, j'ai corrigé ce problème une fois pour d'autres, mais au final je ne voulais pas tomber dedans moi-même. C'était vraiment gênant. . Je l'ai écrit pour éviter que cela ne se reproduise !

Regardons directement cet exemple :

<?php
$foo = 0;
$bar = &#39;a3b4c5&#39;;
if ( $foo < $bar ) {
    echo &#39;output&#39;;
}

Will Y aura-t-il une sortie ? La réponse est non. Car lorsqu'un nombre est comparé à une chaîne, la chaîne sera convertie en nombre. Si vous appelez la fonction intval( $bar ) qui la convertit en entier, vous constaterez que sa valeur est 0. , donc naturellement ce ne sera pas le cas. Il est supérieur à 0. Si la valeur de $bar est '3a4b5c', alors le résultat sera affiché, car la valeur de la chaîne convertie en nombre est 3. Pour les règles de conversion spécifiques, veuillez vous référer à PHP Manuel :

http://us2.php.net/manual/zh/langue.types.string.php#langue.types.string.conversion

En fait, si $foo est initialisé à '', il n'y aura pas d'erreur si deux chaînes sont comparées.

Jetons un œil à une autre fosse :

if ( $foo == &#39;a1b2c3&#39; ) {
    echo &#39;output&#39;;
}

Cette réunion sera il ne sera pas exporté ? La réponse est oui, la raison est en fait la même que ci-dessus, « a1b2c3 » est implicitement converti en 0 lors de la comparaison.

La solution au problème ci-dessus est simplement de comparer les deux nombres du même type sans conversion de type implicite. À ce moment, le signe congruent (===) entre en jeu. , car les trois signes égaux compareront non seulement les valeurs, mais aussi les types. De plus, lors de la comparaison de chaînes, si vous utilisez la fonction strcmp(), ce problème ne se produira pas.

Autre exemple :

$checkedKeys = array(&#39;someKey1&#39;, &#39;someKey2&#39;);
$arrTest = array(&#39;someKey1&#39; => &#39;someValue&#39;, &#39;otherValue&#39;);
foreach ($arrTest as $key => $value)
{
	if (in_array($key, $checkedKeys))
	{
		echo "The key valid: $key \n";
	}
}

De même, il y aura deux sorties ici, non. La clé $ de la sortie secondaire est 0, vous comprenez ? La solution consiste à ajouter le troisième paramètre à la fonction in_array() et à le définir sur true pour effectuer une comparaison de type stricte. Le document est ici http://php.net/manual/zh/function.in-array.php

L'un des grands avantages du langage PHP est sa flexibilité, et cela entraîne également des dangers cachés pour les codes qui ne sont pas écrits avec soin et soin.

Recommandations associées :


Pit 1 dans lequel PHP peut tomber

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