mirror of
https://github.com/php/doc-de.git
synced 2026-03-24 07:12:15 +01:00
169 lines
6.1 KiB
XML
169 lines
6.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: e587d0655e426f97b3fcb431453da5030e743b23 Maintainer: samesch 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>Numerische Zeichenketten</title>
|
|
<para>
|
|
In PHP gilt eine Zeichenkette (Typ <type>string</type>) als numerisch, wenn
|
|
er als Ganzzahl (<type>int</type>) oder Gleitkommazahl (<type>float</type>)
|
|
interpretiert werden kann.
|
|
</para>
|
|
|
|
<para>
|
|
Formal seit 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>
|
|
In PHP gibt es auch das Konzept der <emphasis>vorangestellten</emphasis>
|
|
numerischen Zeichenkette. Dies ist einfach eine Zeichenkette, die wie eine
|
|
numerische Zeichenkette beginnt, auf die beliebige Zeichen folgen.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
Jede Zeichenkette, die den Buchstaben <literal>E</literal> (Groß- und
|
|
Kleinschreibung wird nicht berücksichtigt) enthält, wird als Zahl in
|
|
wissenschaftlicher Notation betrachtet. Dies kann zu unerwarteten
|
|
Ergebnissen führen.
|
|
</para>
|
|
<example>
|
|
<title>Vergleich wissenschaftlicher Schreibweisen</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
var_dump("0D1" == "000"); // false, "0D1" ist keine wissenschaftliche Schreibweise
|
|
var_dump("0E1" == "000"); // true, "0E1" ist 0 * (10 ^ 1) also 0
|
|
var_dump("2E1" == "020"); // true, "2E1" ist 2 * (10 ^ 1) also 20
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</note>
|
|
|
|
<sect2 xml:id="language.types.numeric-string.conversion">
|
|
<title>Zeichenketten, die im numerischen Kontext verwendet werden</title>
|
|
<para>
|
|
Wenn ein Wert vom Typ <type>string</type> als Zahl ausgewertet werden muss
|
|
(&zb; arithmetische Operationen, Deklaration des Typs <type>int</type>
|
|
usw.), werden die folgenden Schritte durchgeführt, um das Ergebnis zu
|
|
ermitteln:
|
|
|
|
<orderedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Wenn der <type>String</type> numerisch ist, wird er in einen
|
|
<type>Int</type> aufgelöst, sofern er eine ganzzahlige numerische
|
|
Zeichenkette ist und gemäß der Definition von
|
|
<constant>PHP_INT_MAX</constant> innerhalb der Grenzen des Typs
|
|
<type>int</type> liegt, ansonsten wird er in einen <type>Float</type>
|
|
aufgelöst.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Wenn der Kontext vorangestellte numerische Zeichenketten erlaubt und der
|
|
<type>String</type> eine solche ist, wird in einen <type>Int</type>
|
|
aufgelöst, sofern der vorangestellte Teil des <type>String</type>s eine
|
|
ganzzahlige numerische Zeichenkette ist und gemäß der Definition von
|
|
<constant>PHP_INT_MAX</constant> innerhalb der Grenzen des Typs
|
|
<type>int</type> liegt, ansonsten wird in einen <type>Float</type>
|
|
aufgelöst. Darüber hinaus wird ein Fehler der Stufe
|
|
<constant>E_WARNING</constant> ausgelöst.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Wenn der <type>String</type> nicht numerisch ist, wird eine
|
|
<classname>TypeError</classname>-Exception geworfen.
|
|
</simpara>
|
|
</listitem>
|
|
</orderedlist>
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 xml:id="language.types.numeric-string.prior">
|
|
<title>Verhalten vor PHP 8.0.0</title>
|
|
<para>
|
|
Vor PHP 8.0.0 galt ein <type>String</type> nur dann als numerisch, wenn er
|
|
ein <emphasis>vorangestelltes</emphasis> Leerzeichen enthielt. Wenn er ein
|
|
<emphasis>nachgestelltes</emphasis> Leerzeichen enthielt, wurde er als
|
|
vorangestellt numerisch betrachtet.
|
|
</para>
|
|
|
|
<para>
|
|
Wenn vor PHP 8.0.0 eine Zeichenkette in einem numerischen Kontext verwendet
|
|
wurde, wurden die gleichen Schritte wie oben beschrieben durchgeführt, mit
|
|
den folgenden Unterschieden:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Bei Verwendung einer führenden numerischen Zeichenkette wurde ein
|
|
<constant>E_NOTICE</constant> anstelle eines
|
|
<constant>E_WARNING</constant> ausgelöst.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Wenn die Zeichenkette nicht numerisch war, wurde ein
|
|
<constant>E_WARNING</constant> ausgelöst und der Wert
|
|
<literal>0</literal> zurückgegeben.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
Vor PHP 7.1.0 wurde weder <constant>E_NOTICE</constant> noch
|
|
<constant>E_WARNING</constant> ausgelöst.
|
|
</para>
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$foo = 1 + "10.5"; // $foo ist vom Typ float (11.5)
|
|
$foo = 1 + "-1.3e3"; // $foo ist vom Typ float (-1299)
|
|
$foo = 1 + "bob-1.3e3"; // TypeError seit PHP 8.0.0; davor ist $foo vom Typ integer (1)
|
|
$foo = 1 + "bob3"; // TypeError seit PHP 8.0.0; davor ist $foo vom Typ integer (1)
|
|
$foo = 1 + "10 Small Pigs"; // $foo ist vom Typ integer (11) und in PHP 8.0.0 wird ein E_WARNING ausgelöst; davor E_NOTICE
|
|
$foo = 4 + "10.2 Little Piggies"; // $foo ist vom Typ float (14.2) und in PHP 8.0.0 wird ein E_WARNING ausgelöst; davor E_NOTICE
|
|
$foo = "10.0 pigs " + 1; // $foo ist vom Typ float (11) und in PHP 8.0.0 wird ein E_WARNING ausgelöst; davor E_NOTICE
|
|
$foo = "10.0 pigs " + 1.0; // $foo ist vom Typ float (11) und in PHP 8.0.0 wird ein E_WARNING ausgelöst; davor E_NOTICE
|
|
?>
|
|
]]>
|
|
</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
|
|
-->
|