mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
160 lines
5.7 KiB
XML
160 lines
5.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: e587d0655e426f97b3fcb431453da5030e743b23 Maintainer: leonardolara Status: ready --><!-- CREDITS: marcosmarcolin, leonardolara -->
|
|
<sect1 xml:id="language.types.numeric-strings" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Strings numéricas</title>
|
|
<para>
|
|
Uma <type>string</type> PHP é considerada numérica se puder ser interpretada
|
|
como <type>int</type> ou <type>float</type>.
|
|
</para>
|
|
|
|
<para>
|
|
Formalmente a partir do 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>
|
|
O PHP também tem um conceito de strings numéricas <emphasis>principais</emphasis>.
|
|
Isso é simplesmente uma string que começa como uma string numérica seguida por
|
|
qualquer caractere.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
Qualquer string que contenha a letra <literal>E</literal> (sem distinção entre maiúsculas e minúsculas)
|
|
delimitada por números será vista como um número expresso em notação científica.
|
|
Isso pode produzir resultados inesperados.
|
|
</para>
|
|
<example>
|
|
<title>Comparações de notações científicas</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
var_dump("0D1" == "000"); // falso, "0D1" não é notação científica
|
|
var_dump("0E1" == "000"); // verdadeiro, "0E1" é 0 * (10 ^ 1), ou 0
|
|
var_dump("2E1" == "020"); // verdadeiro, "2E1" é 2 * (10 ^ 1), ou 20
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</note>
|
|
|
|
<sect2 xml:id="language.types.numeric-string.conversion">
|
|
<title>Strings usadas em contextos numéricos</title>
|
|
<para>
|
|
Quando uma <type>string</type> precisa ser avaliada como número (por exemplo, operações
|
|
aritméticas, declaração de tipo <type>int</type>, etc.), as seguintes etapas
|
|
são executadas para determinar o resultado:
|
|
|
|
<orderedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Se a <type>string</type> for numérica, resolva para um <type>int</type> se
|
|
a <type>string</type> for uma string numérica inteira e se encaixar nos
|
|
limites do tipo <type>int</type> (conforme definido por
|
|
<constant>PHP_INT_MAX</constant>), caso contrário resolva para um
|
|
<type>float</type>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Se o contexto permitir strings numéricas iniciais e a <type>string</type>
|
|
for uma, resolva para um <type>int</type> se a parte inicial da string for uma
|
|
<type>string</type> numérica inteira e se encaixar nos
|
|
limites do tipo <type>int</type> (conforme definido por
|
|
<constant>PHP_INT_MAX</constant>), caso contrário resolva para um
|
|
<type>float</type>.
|
|
Além disso, um erro de nível <constant>E_WARNING</constant> é gerado.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
A <type>string</type> não é numérica, lance um
|
|
<classname>TypeError</classname>.
|
|
</simpara>
|
|
</listitem>
|
|
</orderedlist>
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 xml:id="language.types.numeric-string.prior">
|
|
<title>Comportamento antes do PHP 8.0.0</title>
|
|
<para>
|
|
Antes do PHP 8.0.0, uma <type>string</type> era considerada numérica apenas se
|
|
tivesse espaços em branco à <emphasis>esquerda</emphasis>, se tivesse espaços em branco à
|
|
<emphasis>direita</emphasis>, a string era considerada
|
|
numérica à esquerda.
|
|
</para>
|
|
|
|
<para>
|
|
Antes do PHP 8.0.0, quando uma string era usada em um contexto numérico,
|
|
ela executava as mesmas etapas acima com as seguintes diferenças:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
O uso de uma sequência numérica inicial geraria um
|
|
<constant>E_NOTICE</constant> em vez de um <constant>E_WARNING</constant>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Se a string não for numérica, um <constant>E_WARNING</constant> foi
|
|
levantado e o valor <literal>0</literal> seria retornado.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
Antes do PHP 7.1.0, nem <constant>E_NOTICE</constant> nem
|
|
<constant>E_WARNING</constant> eram gerados.
|
|
</para>
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$foo = 1 + "10.5"; // $foo é float (11.5)
|
|
$foo = 1 + "-1.3e3"; // $foo é float (-1299)
|
|
$foo = 1 + "bob-1.3e3"; // TypeError a partir do PHP 8.0.0, $foo é inteiro (1) anteriormente
|
|
$foo = 1 + "bob3"; // TypeError a partir do PHP 8.0.0, $foo é inteiro (1) anteriormente
|
|
$foo = 1 + "10 Small Pigs"; // $foo é inteiro (11) e um E_WARNING é levantado no PHP 8.0.0, E_NOTICE anteriormente
|
|
$foo = 4 + "10.2 Little Piggies"; // $foo é float (14.2) e um E_WARNING é levantado no PHP 8.0.0, E_NOTICE anteriormente
|
|
$foo = "10.0 pigs " + 1; // $foo é float (11) e um E_WARNING é levantado no PHP 8.0.0, E_NOTICE anteriormente
|
|
$foo = "10.0 pigs " + 1.0; // $foo é float (11) e um E_WARNING é levantado no PHP 8.0.0, E_NOTICE anteriormente
|
|
?>
|
|
]]>
|
|
</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
|
|
-->
|