Что такое типы данных
Каждая переменная и каждое значение в 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