substr()

Pourquoi ?

a marqué ce sujet comme résolu.

Dans ton troisième cas, 912 est supérieur à la longueur de la chaîne, donc toute la chaîne est renvoyée.

Dans ton deuxième cas, le nombre littéral est trop grand pour être stocké dans un entier, il est donc implicitement converti en float, puis la fonction substr cherche à le caster en int, ce qu'elle ne parvient pas à faire, puisqu'il est trop grand. Donc bogue. Donc false.

Dans ton troisième cas, le nombre littéral est trop grand pour être stocké même dans un float et visiblement (je n'ai pas pu trouver de source qui l'affirme explicitement, mais ça paraît le plus vraisemblable), faute de pouvoir le stocker, ça renvoie false, qui est converti en int ayant la valeur 0. Donc chaîne vide.

+1 -0

Salut,

Comme les deux premiers entiers littéraux sont trop long, PHP considère que ce sont des float. Ils sont donc convertit ensuite en entier… sauf que cette conversion est indéfinie pour des float trop grands. J'ai fait mes tests, et le premier est convertir en zéro, et le deuxième en un grand nombre négatif. Plus d'infos dans la doc sur les entiers.

Du coup, selon la documentation de substr, une chaîne vide est renvoyée dans le premier cas, et false est renvoyé dans le deuxième cas. Le troisième cas marche parfaitement.

Pour plus d'infos, la doc de substr en anglais. Il y a aussi une version française, mais il manque des choses, j'ai l'impression…

EDIT: réponse plus précise que mon VDD, parce que je suis allé me taper la doc. :D

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte