svn: /phpdoc/ru/trunk/language/types/ numeric-strings.xml

[email protected] (Andrey Gromov) Mon, 07 Dec 2020 08:22:55 +0000
Newsgroups php.doc.ru
Message-ID <[email protected]>
rjhdby                                   Mon, 07 Dec 2020 08:22:55 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=351943

Log:
new

Changed paths:
    A   phpdoc/ru/trunk/language/types/numeric-strings.xml

Added: phpdoc/ru/trunk/language/types/numeric-strings.xml
===================================================================
--- phpdoc/ru/trunk/language/types/numeric-strings.xml	                        (rev 0)
+++ phpdoc/ru/trunk/language/types/numeric-strings.xml	2020-12-07 08:22:55 UTC (rev 351943)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 351703 Maintainer: rjhdby 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>Числовые строки</title>
+ <para>
+  В PHP, строка (<type>string</type>) счетается числовой, если её можно интерпретировать как целое
+  (<type>int</type>) число или как число с плавающей запятой (<type>float</type>).
+ </para>
+
+ <para>
+  Формально с 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} [+-]? {EXPONENT_DNUM} {WHITESPACES}
+NUM_STRING       ({INT_NUM_STRING} | {FLOAT_NUM_STRING})
+]]>
+  </programlisting>
+ </informalexample>
+
+ <para>
+  В PHP также присутствует концепция <emphasis>префиксной</emphasis> числовой строки.
+  Это строка, которая начинается как числовая и продалжается любыми другими символами.
+ </para>
+
+ <sect2 xml:id="language.types.numeric-string.conversion">
+  <title>Строки, используемые в числовых контекстах</title>
+  <para>
+   Когда строку необходимо использовать в качестве числа (например арифметические операции, декларация
+   целочисленного типа, и т.д.), используется следующий алгоритм действий:
+   <orderedlist>
+    <listitem>
+     <simpara>
+      Если строка числовая, представляет целое число и не превышает максимально
+      допустимого значения для типа <type>int</type> (определённого в
+      <constant>PHP_INT_MAX</constant>), то она приводится к типу <type>int</type>.
+      Иначе она приводится к типу <type>float</type>.
+     </simpara>
+    </listitem>
+    <listitem>
+     <simpara>
+      Если в заданном контексте дозволительно использовать префиксную числовую строку, то,
+      если начало строки представляет целое число и не превышает максимально
+      допустимого значения для типа <type>int</type> (определённого в
+      <constant>PHP_INT_MAX</constant>), то она приводится к типу <type>int</type>.
+      Иначе она приводится к типу <type>float</type>.
+      Также, в этом случае, выдаётся ошибка уровня <constant>E_WARNING</constant>.
+     </simpara>
+    </listitem>
+    <listitem>
+     <simpara>
+      Если строка не числовая - выбрасывается исключение
+      <classname>TypeError</classname>.
+     </simpara>
+    </listitem>
+   </orderedlist>
+  </para>
+ </sect2>
+
+ <sect2 xml:id="language.types.numeric-string.prior">
+  <title>Поведение до PHP 8.0.0</title>
+  <para>
+   До PHP 8.0.0, строка считалась числовой только в случае, если она
+   начиналась с пробельных ситмволов. Если она завершалась пробельными символами -
+   она считалась префиксной числовой.
+  </para>
+
+  <para>
+   До PHP 8.0.0, когда строку необходимо использовать как число, использовался тот же алгоритм,
+   что и описан выше, но с некоторыми отличиями:
+   <itemizedlist>
+    <listitem>
+     <simpara>
+      Использование префиксной числовой строки вызывало ошибку уровня
+      <constant>E_NOTICE</constant>, а не <constant>E_WARNING</constant>.
+     </simpara>
+    </listitem>
+    <listitem>
+     <simpara>
+      Если строка не являлась числовой, вызывалась ошибка уровня <constant>E_WARNING</constant>,
+      а сома строка приводилась к числу <literal>0</literal>.
+     </simpara>
+    </listitem>
+   </itemizedlist>
+  </para>
+
+  <informalexample>
+   <programlisting role="php">
+<![CDATA[
+<?php
+$foo = 1 + "10.5";                // $foo считается за число с плавающей запятой (11.5)
+$foo = 1 + "-1.3e3";              // $foo считается за число с плавающей запятой (-1299)
+$foo = 1 + "bob-1.3e3";           // TypeError начиная с PHP 8.0.0. В более ранних версиях $foo считалось за целое число (1)
+$foo = 1 + "bob3";                // TypeError начиная с PHP 8.0.0, В более ранних версиях $foo считалось за целое число (1)
+$foo = 1 + "10 Small Pigs";       // $foo - целое (11). В PHP 8.0.0 создаётся ошибка уровня E_WARNING, а в более ранних версиях уровня E_NOTICE
+$foo = 4 + "10.2 Little Piggies"; // $foo - число с плавающей запятой (14.2). В PHP 8.0.0 создаётся ошибка уровня E_WARNING, а в более ранних версиях уровня E_NOTICE
+$foo = "10.0 pigs " + 1;          // $foo - число с плавающей запятой (11). В PHP 8.0.0 создаётся ошибка уровня E_WARNING, а в более ранних версиях уровня E_NOTICE
+$foo = "10.0 pigs " + 1.0;        // $foo - число с плавающей запятой (11). В PHP 8.0.0 создаётся ошибка уровня E_WARNING, а в более ранних версиях уровня 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
+-->


Property changes on: phpdoc/ru/trunk/language/types/numeric-strings.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property