Maison >développement back-end >tutoriel php >PHP Master | 3 Faits PHP étranges que vous ne connaissez peut-être pas

PHP Master | 3 Faits PHP étranges que vous ne connaissez peut-être pas

William Shakespeare
William Shakespeareoriginal
2025-02-25 18:31:12827parcourir

PHP Master | 3 Strange PHP Facts You May Not Know

La flexibilité et la facilité d'utilisation de PHP masquent parfois les comportements surprenants. Cet article explore trois de ces bizarreries, expliquant leurs causes sous-jacentes et offrant des solutions.

Prise des clés:

  • Limitations de précision à point flottante: Les calculs impliquant des nombres à virgule flottante peuvent donner des résultats inattendus en raison des limites inhérentes de la représentation informatique des nombres réels. Par exemple, (int)((0.1 0.7) * 10) peut retourner 7 au lieu du 8.
  • attendu>
  • Comportement d'incrément de chaîne: L'incrémentation d'une chaîne dans PHP se comporte de manière unique. Si la chaîne se termine par un nombre, la partie numérique incrémente; Si cela se termine par une lettre, la dernière lettre avance par ordre alphabétique. Les caractères de fin non alphanumériques ne sont pas affectés.
  • in_array() Comparaison lâche: La comparaison lâche par défaut de la fonction in_array() peut conduire à de faux positifs. Les chaînes non vides sont extrêmement égales à true et à des nombres non nuls, nécessitant une comparaison stricte (true comme troisième paramètre) pour des résultats précis.

INSÉNÉRATIONS DE POINT FLOCTANT:

Les nombres à virgule flottante ne peuvent pas représenter parfaitement tous les nombres réels. Les opérations sur des nombres apparemment représentés avec précision peuvent entraîner des inexactitudes subtiles. Ce n'est pas unique à PHP; C'est une limitation fondamentale de l'arithmétique informatique. L'article classique "Ce que chaque informaticien doit savoir sur l'arithmétique à virgule flottante" fournit une explication approfondie.

Considérez ce code:

<code class="language-php"><?php echo (int) ((0.1 + 0.7) * 10); ?></code>

La sortie est 7, pas 8. Le calcul intermédiaire 0.1 0.7 entraîne une valeur légèrement inférieure à 0,8 en raison des limitations de précision. La multiplication par 10 conserve cette erreur, et la coulée en entier tronque la partie fractionnaire, résultant en 7.

Pour atténuer cela, utilisez les fonctions de précision arbitraires BCMATH lorsque la précision est critique.

DIRICS D'INCRÉMENTATION DE CHAMP:

Le comportement d'incrément de chaîne de PHP diffère des langues comme C. Examinons ces exemples:

<code class="language-php"><?php
$a = 'fact_2'; echo ++$a; // Output: fact_3
$a = '2nd_fact'; echo ++$a; // Output: 2nd_facu
$a = 'a_fact'; echo ++$a; // Output: a_facu
$a = 'a_fact?'; echo ++$a; // Output: a_fact?
?></code>

L'opérateur d'incrément ( ) sur une chaîne se terminant par un nombre incréments de ce nombre. S'il se termine par une lettre, la dernière lettre est incrémentée par ordre alphabétique. Les cordes se terminant par des caractères non alphanumériques restent inchangées. Ce comportement, bien que documenté, est souvent négligé.

in_array() et des comparaisons lâches:

Les règles de comparaison lâche de PHP affectent in_array(). Considérez:

<code class="language-php"><?php
$array = array('isReady' => false, 'isPHP' => true, 'isStrange' => true);
var_dump(in_array('sitepoint.com', $array)); // Output: bool(true)
?></code>

La fonction renvoie true parce que la comparaison lâche de PHP considère une chaîne non vide égale à true. Pour appliquer une comparaison stricte, utilisez le troisième paramètre:

<code class="language-php"><?php
var_dump(in_array('sitepoint.com', $array, true)); // Output: bool(false)
?></code>

Conclusion:

Ces exemples mettent en évidence les pièges potentiels en PHP. Soyez toujours conscient des limitations de précision à virgule flottante, comprenez le comportement d'incrément de chaîne unique de PHP et utilisez des comparaisons strictes lorsque vous traitez des tableaux et in_array() pour éviter des résultats inattendus. Une compréhension approfondie de la gestion des types de PHP est essentielle pour écrire un code robuste et prévisible.

Image via Fotolia

(Section FAQS supprimée car elle était largement répétitive du contenu principal et les FAQ fournies n'étaient pas directement liées aux trois faits étranges présentés.)

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