mirror of
https://github.com/php/doc-uk.git
synced 2026-03-24 07:02:12 +01:00
Co-authored-by: magik <magik.life.n@gmail.com> Co-authored-by: OleksiiZhylko <172418466+OleksiiZhylko@users.noreply.github.com>
309 lines
12 KiB
XML
309 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 8859c8b96cd9e80652813f7bcf561432a5e9f934 Maintainer: mproshchuk Status: ready -->
|
||
<sect1 xml:id="language.types.integer">
|
||
<title>Ціле число (integer)</title>
|
||
|
||
<simpara>
|
||
Цілим (integer) називають число, що належить множині
|
||
ℤ = {..., -2, -1, 0, 1, 2, ...}.
|
||
</simpara>
|
||
|
||
<sect2 role="seealso">
|
||
&reftitle.seealso;
|
||
<para>
|
||
<simplelist>
|
||
<member><link linkend="language.types.float">Десяткові дроби</link></member>
|
||
<member><link linkend="book.bc">Числа довільної точності / BCMath</link></member>
|
||
<member><link linkend="book.gmp">Цілі довільної довжини / GMP</link></member>
|
||
</simplelist>
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.integer.syntax">
|
||
<title>Синтаксис</title>
|
||
|
||
<simpara>
|
||
Цілі числа (<type>int</type>) можна вказувати в десятковій (основа 10),
|
||
шістнадцятковій (основа 16), вісімковій (основа 8) або двійковій (основа 2)
|
||
формах запису.
|
||
<link linkend="language.operators.arithmetic">Мінус-оператором</link> можна
|
||
позначити від'ємне ціле число (<type>int</type>).
|
||
</simpara>
|
||
|
||
<para>
|
||
Для вісімкової форми запису перед числом ставиться <literal>0</literal> (нуль).
|
||
Починаючи з PHP 8.1.0, вісімковій формі запису може передувати
|
||
<literal>0o</literal> або <literal>0O</literal>.
|
||
Для шістнадцяткової форми запису перед числом ставиться <literal>0x</literal> (нуль та латинська x).
|
||
Для двійкової форми запису перед числом ставиться <literal>0b</literal> (нуль та b).
|
||
</para>
|
||
|
||
<para>
|
||
Починаючи з PHP 7.4.0, для кращої розбірливості цілі числа можуть містити
|
||
знаки підкреслення (<literal>_</literal>) між цифрами. Потім парсер PHP
|
||
вилучає ці підкреслення.
|
||
</para>
|
||
|
||
<example>
|
||
<title>Запис цілого числа</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$a = 1234; // десяткове число
|
||
$a = 1_234_567; // десяткове число (починаючи з PHP 7.4.0)
|
||
$a = -123; // від'ємне десяткове число
|
||
$a = 0123; // вісімкове число (дорівнює десятковому 83)
|
||
a = 0o123; // вісімкове число (починаючи з PHP 8.1.0)
|
||
$a = 0x1A; // шістнадцяткове число (дорівнює десятковому 26)
|
||
$a = 0b11111111; // двійкове число (дорівнює десятковому 255)
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<para>
|
||
Формально, починаючи з PHP 8.1.0, структура цілого числа (<type>int</type>) є
|
||
такою (раніше вісімкові префікси <literal>0o</literal> та
|
||
<literal>0O</literal> не були дозволені, а до PHP 7.4.0 не були дозволені
|
||
символи підкреслення):
|
||
</para>
|
||
|
||
<informalexample>
|
||
<programlisting>
|
||
<![CDATA[
|
||
десяткове : [1-9][0-9]*(_[0-9]+)*
|
||
| 0
|
||
|
||
шістнадцяткове : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*
|
||
|
||
вісімкове : 0[oO]?[0-7]+(_[0-7]+)*
|
||
|
||
двійкове : 0[bB][01]+(_[01]+)*
|
||
|
||
ціле : десяткове
|
||
| шістнадцяткове
|
||
| вісімкове
|
||
| двійкове
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
|
||
<para>
|
||
Розмір цілого числа (<type>int</type>) залежить від платформи, хоча, зазвичай,
|
||
максимальне значення близьке до двох мільярдів (це 32-бітне знакове).
|
||
64-бітні платформи зазвичай мають максимальне значення близьке до 9E18.
|
||
PHP не підтримує беззнакові цілі числа. Розмір цілого числа містить константа
|
||
<constant>PHP_INT_SIZE</constant>, максимальне значення — константа
|
||
<constant>PHP_INT_MAX</constant> та мінімальне значення — константа
|
||
<constant>PHP_INT_MIN</constant>.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.integer.overflow">
|
||
<title>Переповнення цілого числа</title>
|
||
|
||
<para>
|
||
Якщо PHP стикається з числом, що виходить за межі типу <type>int</type>, то
|
||
інтерпретує його як десятковий дріб (<type>float</type>). Відповідно, в
|
||
операціях з результатом за межами типу <type>int</type> буде повертатись
|
||
десятковий дріб (<type>float</type>).
|
||
</para>
|
||
|
||
<example>
|
||
<title>Переповнення цілого числа</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$велике_число = 50000000000000000000;
|
||
var_dump($велике_число); // float(5.0E+19)
|
||
|
||
var_dump(PHP_INT_MAX + 1); // у 32-бітних системах: float(2147483648)
|
||
// у 64-бітних системах: float(9.2233720368548E+18)
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.integer.division">
|
||
<title>Ділення цілого числа</title>
|
||
|
||
<para>
|
||
В PHP не існує оператора для ділення цілих чисел (<type>int</type>). Для
|
||
цього застосовується функція <function>intdiv</function>.
|
||
Дія <literal>1/2</literal> в результаті поверне десятковий дріб
|
||
(<type>float</type>) <literal>0.5</literal>. Таке значення можна привести до
|
||
цілочисельного (<type>int</type>) типу з округленням в бік нуля. Натомість
|
||
регулювати округлення можна функцією <function>round</function>.
|
||
</para>
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
var_dump(25/7); // float(3.5714285714286)
|
||
var_dump((int) (25/7)); // int(3)
|
||
var_dump(round(25/7)); // float(4)
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.integer.casting">
|
||
<title>Перетворення в ціле число</title>
|
||
|
||
<simpara>
|
||
Щоб явно перетворити значення на ціле число (<type>int</type>),
|
||
застосовується приведення за допомогою запису <literal>(int)</literal> або
|
||
<literal>(integer)</literal>. Здебільшого приведення не потрібне, оскільки
|
||
значення буде автоматично перетворено, якщо оператор, функція чи структура
|
||
контролю очікують значення типу <type>int</type>. Також тип значення можна
|
||
перетворити на <type>int</type> функцією <function>intval</function>.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
Результатом перетворення типу <type>resource</type> на <type>int</type> є
|
||
унікальне число, яке призначається для ресурсу (<type>resource</type>) під
|
||
час виконання програми.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
&Seealso;: <link linkend="language.types.type-juggling">Перетворення типів</link>.
|
||
</simpara>
|
||
|
||
<sect3 xml:id="language.types.integer.casting.from-boolean">
|
||
<title>З <link linkend="language.types.boolean">логічного (bool)</link></title>
|
||
|
||
<simpara>
|
||
&false; буде перетворено на <literal>0</literal> (нуль), а &true; —
|
||
на <literal>1</literal> (одиницю).
|
||
</simpara>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.integer.casting.from-float">
|
||
<title>
|
||
З <link linkend="language.types.float">десяткового дробу (float)</link>
|
||
</title>
|
||
|
||
<simpara>
|
||
Під час перетворення <type>float</type> на <type>int</type> відбувається
|
||
округлення <emphasis>в бік нуля</emphasis>. Починаючи з PHP 8.1.0, у
|
||
відповідь на перетворення &float; з ненульовою дробовою частиною на
|
||
&integer;, що призводить до втрати точності, виводиться повідомлення про
|
||
застарілий функціонал.
|
||
</simpara>
|
||
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
function foo($value): int {
|
||
return $value;
|
||
}
|
||
|
||
var_dump(foo(8.1)); // "Deprecated: Implicit conversion from float 8.1 to int loses precision", починаючи з PHP 8.1.0
|
||
var_dump(foo(8.1)); // 8 до PHP 8.1.0
|
||
var_dump(foo(8.0)); // 8 у обох випадках
|
||
|
||
var_dump((int) 8.1); // 8 у обох випадках
|
||
var_dump(intval(8.1)); // 8 у обох випадках
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
|
||
<para>
|
||
Якщо десятковий дріб вийде за межі типу <type>int</type> (зазвичай це
|
||
<literal>+/- 2.15e+9 = 2^31</literal> на 32-бітних платформах та
|
||
<literal>+/- 9.22e+18 = 2^63</literal> на 64-бітних платформах), результат
|
||
буде невизначеним, оскільки тип <type>float</type> не має достатньої
|
||
точності, щоб дати саме цілочисельний результат. Інтерпретатор про це не
|
||
повідомляє!
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
Результатом приведення спеціальних чисел <literal>NaN</literal>,
|
||
<literal>Inf</literal> та <literal>-Inf</literal> до типу
|
||
<type>int</type> є число нуль (<literal>0</literal>).
|
||
</para>
|
||
</note>
|
||
|
||
<warning>
|
||
<para>
|
||
Не можна перетворювати невідомий дріб на ціле число, оскільки це може
|
||
призвести до непередбачуваного результату.
|
||
</para>
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo (int) ( (0.1+0.7) * 10 ); // виводить 7!
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
|
||
<para>
|
||
Варто переглянути <link linkend="warn.float-precision">застереження про
|
||
точність десяткового дробу</link>.
|
||
</para>
|
||
</warning>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.integer.casting.from-string">
|
||
<title>З <link linkend="language.types.float">рядкового (string)</link></title>
|
||
|
||
<simpara>
|
||
Якщо рядок є
|
||
<link linkend="language.types.numeric-strings">числовим</link> або
|
||
починається з числа, то його можна перетворити на відповідне цілочисельне
|
||
значення, а інакше — на нуль (<literal>0</literal>).
|
||
</simpara>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.integer.casting-from-null">
|
||
<title>З <type>NULL</type></title>
|
||
|
||
<simpara>
|
||
&null; завжди перетворюється на нуль (<literal>0</literal>).
|
||
</simpara>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.integer.casting.from-other">
|
||
<title>З інших типів</title>
|
||
|
||
<caution>
|
||
<simpara>
|
||
Результат перетворення інших типів на <type>int</type> є невизначеним.
|
||
<emphasis>НЕ</emphasis> можна покладатись на такі перетворення, оскільки
|
||
їхній алгоритм може змінюватись без попереджень.
|
||
</simpara>
|
||
</caution>
|
||
</sect3>
|
||
|
||
</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
|
||
-->
|