Типы данных в PHP

Александр Кичатов

Что такое типы данных

Каждая переменная и каждое значение в PHP имеет свой тип данных:

<?php
    $name = 'Vasya'; // Строка
    $age = 20; // Целое число

Тип данных - это такая характеристика данных, которая определяет, какие значения могут содержать данные, какие возможны операции с ними и как они хранятся в памяти.

Типы данных в PHP

В PHP существуют следующие основные типы данных:

Строка

Строки в PHP размещаются в одинарных или двойных кавычках. Главное различие в том, что в двойные кавычки можно подставить значение переменной, например:

<?php
    $name =  'Петя';
    echo 'Привет, $name'; // Привет, $name
    echo "Привет, $name"; // Привет, Петя

Другие различия будут рассмотрены в отдельном уроке.

Для PHP 7+ 64-битных сборок нет ограничений на максимальную длину строки, для остальных она составляет 2Гб.

Булев тип

Значение булева типа может содержать в себе только true или false (истина или ложь).

$is_show = true;
$can_move = false;

Булев тип удобно использовать для всяких флажков и статусов вроде отправлено/не отправлено, просмотрено/не просмотрено и т.д.

Целое число

Целое число - это число без дробной части:

<?php
    $price = 1500;
    $sale = -800;

Целые числа имеют следующие минимальные и максимальные значения:

  • От -2 147 483 648 до 2 147 483 647, т.е. ± 2 миллиарда для 32-битных версий PHP
  • От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, т.е. ± 9 квинтиллионов для 64-битных версий PHP

Помимо десятичной системы счисления, PHP также поддерживает двоичную, восьмеричную и шестнадцатеричную:

<?php
    $num = 1234; // десятичное число
    $num = 0123; // восьмеричное число (эквивалентно 83 в десятичной системе)
    $num = 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
    $num = 0b11111111; // двоичное число (эквивалентно 255 в десятичной системе)

Дробное число

Разделителем дробной части в PHP является точка:

<?php
    $num = 15.28;

С дробными числами существует проблема, характерная не только для PHP, но и для любых других языков, где используется двоичное представление чисел с плавающей точкой.

Проблема в том, что дробные числа имеют ограниченную точность, что в некоторых ситуациях может приводить к неожиданным результатам:

<?php
$num1 = 1 + 2;
$num2 = 0.1 + 0.2;

var_dump($num1 == 3); // true
var_dump($num2 == 0.3); // false

Оператор сравнения == возвращает true или false если два значения соответственно равны или не равны.

В примере выше PHP считает верным выражение 1 + 2 == 3, но когда дело касается дробей, PHP не считает верным выражение 0.1 + 0.2 == 0.3.

Это происходит потому что дроби в PHP имеют ограниченную точность. В мозгах PHP результат выражения может быть чем-то вроде 3.000000000007.

Поэтому когда нужно производить какие-то вычисления, где важна абсолютная точность, нужно использовать специальные функции произвольной точности:

<?php
$num = bcadd(0.1, 0.2, 1); // 1 - число знаков после запятой

var_dump($num == 0.3); // true

В примере выше bcadd() приняла 2 дробных числа и количество знаков после запятой, в результате мы получили правильный ответ: 0.3.

Массив

Массив - это значение, которое может содержать в себе сразу несколько других значений:

<?php
    $array = [
        'name' => 'Вася',
        'age' => 18
    ];

    echo $array['name']; // Вася

Массивы будут подробно рассмотрены в уроке Массивы в PHP.

Объект

Объект - это часть сложной концепции под названием ООП (объектно-ориентированное программирование). Объект может иметь как собственные переменные, так и функции:

<?php
    class User {
        public $name;
        public $age;

        public function show()
        {
            echo $this->name, ' ', $this->age;
        }
    }

    $petya = new User;
    $petya->name = 'Вася';
    $petya->age = 18;
    $petya->show(); // Вася 18

Объекты будут подробно рассмотрены в будущем.

Ресурс

Ресурс - это специальная ссылка на какой-либо внешний ресурс, чаще всего файл или подключение к базе данных:

<?php
    $resource = fopen('D:\OpenServer\domains\test.local\file.txt', 'r');

В примере выше функция fopen возвращает ссылку на файл, которую затем можно использовать вместе с другими функциями для управления файлом.

NULL

NULL означает отсутствие значения:

<?php
    $var = null;

Как определить тип переменной

Получить тип переменной можно с помощью функции gettype():

<?php
    echo gettype(15); // integer
    echo gettype('Вилка'); // string
    echo gettype(true); // boolean

Комментарии