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

From: Date: Mon, 07 Dec 2020 08:22:55 +0000
Subject: svn: /phpdoc/ru/trunk/language/types/ numeric-strings.xml
Groups: php.doc.ru 
Request: Send a blank email to doc-ru+get-8636@lists.php.net to get a copy of this message
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

« previous php.doc.ru (#8636) next »