mirror of
https://github.com/php/doc-fr.git
synced 2026-03-23 22:52:18 +01:00
159 lines
6.0 KiB
XML
159 lines
6.0 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: e587d0655e426f97b3fcb431453da5030e743b23 Maintainer: pierrick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<sect1 xml:id="language.types.numeric-strings" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Chaînes numériques</title>
|
|
<para>
|
|
Une chaîne de caractères PHP <type>string</type> est considérée comme numérique si elle peut être interprétée comme
|
|
un <type>int</type> ou un <type>float</type>.
|
|
</para>
|
|
|
|
<para>
|
|
Formellement à partir de PHP 8.0.0 :
|
|
</para>
|
|
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
WHITESPACES \s*
|
|
LNUM [0-9]+
|
|
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
|
|
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})
|
|
INT_NUM_STRING {WHITESPACES} [+-]? {LNUM} {WHITESPACES}
|
|
FLOAT_NUM_STRING {WHITESPACES} [+-]? ({DNUM} | {EXPONENT_DNUM}) {WHITESPACES}
|
|
NUM_STRING ({INT_NUM_STRING} | {FLOAT_NUM_STRING})
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>
|
|
PHP dispose également d'un concept de chaînes <emphasis>débutant</emphasis> numériquement.
|
|
Il s'agit simplement d'une chaîne qui commence comme une chaîne numérique suivie de
|
|
n'importe quel caractère.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
Toute chaîne contenant la lettre <literal>E</literal> (insensible à la casse)
|
|
délimitée par des nombres sera considérée comme un nombre exprimé en notation scientifique.
|
|
Cela peut produire des résultats inattendus.
|
|
</para>
|
|
<example>
|
|
<title>Comparaisons avec notation scientifique</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
var_dump("0D1" == "000"); // false, "0D1" is not scientific notation
|
|
var_dump("0E1" == "000"); // true, "0E1" is 0 * (10 ^ 1), or 0
|
|
var_dump("2E1" == "020"); // true, "2E1" is 2 * (10 ^ 1), or 20
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</note>
|
|
|
|
<sect2 xml:id="language.types.numeric-string.conversion">
|
|
<title>Chaînes de caractères utilisées dans des contextes numériques</title>
|
|
<para>
|
|
Lorsqu'une <type>string</type> doit être évaluée comme un nombre (par exemple, opérations
|
|
arithmétiques, déclaration de type <type>int</type>, etc.),
|
|
les étapes suivantes sont suivies pour déterminer le résultat :
|
|
<orderedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Si la <type>string</type> est numérique, elle est résolue en <type>int</type> si
|
|
la <type>string</type> est une chaîne numérique entière et entre dans les
|
|
limites du type <type>int</type> (telles que définies par
|
|
<constant>PHP_INT_MAX</constant>), sinon elle est résolue en un
|
|
<type>float</type>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Si le contexte autorise les chaînes débutant numériquement et que la <type>string</type>
|
|
en est une, elle est résolue en <type>int</type> si la partie initiale de la chaîne
|
|
<type>string</type> est une chaîne numérique entière et entre dans les
|
|
limites du type <type>int</type> (telles que définies par
|
|
<constant>PHP_INT_MAX</constant>), sinon elle est résolue en un
|
|
<type>float</type>.
|
|
De plus, une erreur de niveau <constant>E_WARNING</constant> est soulevée.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Si la <type>string</type> n'est pas numérique, une <classname>TypeError</classname>
|
|
est lancée.
|
|
</simpara>
|
|
</listitem>
|
|
</orderedlist>
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 xml:id="language.types.numeric-string.prior">
|
|
<title>Comportement antérieur à PHP 8.0.0</title>
|
|
<para>
|
|
Avant PHP 8.0.0, une <type>string</type> était considérée comme numérique seulement si elle
|
|
avait des espaces blancs en <emphasis>début</emphasis> de chaîne, si elle avait des espaces blancs
|
|
en <emphasis>fin</emphasis> de chaîne, la chaîne était considérée comme une chaîne débutant numériquement.
|
|
</para>
|
|
|
|
<para>
|
|
Avant PHP 8.0.0, lorsqu'une chaîne de caractères était utilisée dans un contexte numérique,
|
|
elle effectuait les mêmes étapes que ci-dessus, avec les différences suivantes :
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
L'utilisation d'une chaîne de caractères débutant numériquement générait une erreur de type
|
|
<constant>E_NOTICE</constant> au lieu de <constant>E_WARNING</constant>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Si la chaîne de caractères n'était pas numérique, une <constant>E_WARNING</constant>
|
|
était levée et la valeur <literal>0</literal> était retournée.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
Avant PHP 7.1.0, ni <constant>E_NOTICE</constant>
|
|
ni <constant>E_WARNING</constant> n'étaient levées.
|
|
</para>
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$foo = 1 + "10.5"; // $foo is float (11.5)
|
|
$foo = 1 + "-1.3e3"; // $foo is float (-1299)
|
|
$foo = 1 + "bob-1.3e3"; // TypeError as of PHP 8.0.0, $foo is integer (1) previously
|
|
$foo = 1 + "bob3"; // TypeError as of PHP 8.0.0, $foo is integer (1) previously
|
|
$foo = 1 + "10 Small Pigs"; // $foo is integer (11) and an E_WARNING is raised in PHP 8.0.0, E_NOTICE previously
|
|
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) and an E_WARNING is raised in PHP 8.0.0, E_NOTICE previously
|
|
$foo = "10.0 pigs " + 1; // $foo is float (11) and an E_WARNING is raised in PHP 8.0.0, E_NOTICE previously
|
|
$foo = "10.0 pigs " + 1.0; // $foo is float (11) and an E_WARNING is raised in PHP 8.0.0, E_NOTICE previously
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</sect2>
|
|
</sect1>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|