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

PHP – язык с динамической типизацией. Типы не жестко привязаны к переменным, т.е. в одну и туже переменную можно класть что угодно и как угодно. В этом есть плюсы и минусы: это удобно, но опасно с точки зрения секьюрити. Важно не использовать одну переменную для хранения разных типов данных. Также важно понимать, что одна и та же переменная, в зависимости от ее типа в данный момент, в определённых ситуациях может иметь разные значения.

В PHP есть 8 типов данных:

Скалярные типы (скалярный означает, что тип определяется значением):
1. boolean – двоичные данные (TRUE/FALSE)
2. integer – целые числа
3. float – числа с плавающей запятой
4. string – строки (набор символов)

Смешанные типы:
5. array – массивы
6. object – объекты

Два специальных типа:
7. resource – ресурсы
8. NULL – переменная без значения, пустой тип

Рассмотрим их подробнее:

1. boolean

Самый простой тип; два значение – TRUE (1) или FALSE (0). Значения регистронезависимы.

$a = true; // True – это 1;
echo $a * 5; // 1*5

2. integer

Целые числа
$int = 123;
$int = -123;
$int = 0123; // восьмеричное число
$int = 0x1A; // шестнадцатеричное исчесление
$int = 0b11111111; // двоичная система

3. float

Числа с плавающей запятой; также называются double или real.
$float = 1.23;
$float = 1.2e3;
$float = 7E-10;

4. string

Строки, набор символов.

Когда какие кавычки использовать – одинарные или двойные:

echo "Мама мыла \n раму"; // Слово "раму" будет перевод на новую строку благодаря \n
echo 'Мама мыла \n раму'; // Будет выведено все, что в кавычках

Т.е.  в двойных кавычках ” переменные обрабатываются; одинарные ‘ выводят все буквально, как написано.

Управляющие последовательности – если строка заключена в двойные кавычки, PHP распознает управляющие последовательности для специальных символов:
\n новая строка
\r возврат каретки (возврат в начало строки)
\t горизонтальная табуляция

Т.е. если мы хотим вывести символы \n буквально, использую двойные кавычки – нужно их экранировать при помощи обратного слеша \:
echo "Мама мыла \\n раму";

Вывести несколько строк используем HEREDOC:
echo <<<HERE
// тут может быть сколько угодно команд и переменных; <<< - это аналог двойных кавычек; переменные будут подставлены автоматически.
HERE;

HERE – является именем метки; вместо HERE можно использовать любое слово.

Противоположностью является NOWDOC:
echo <<<'METKA'
// это аналог одинарных кавычек, переменные не будут подставлены автоматически
METKA;

Внимание!
При использовании HEREDOC часто возникают ошибки, связанные с использованием пробелов до (для закрывающей) и после меток. При этом в случае пробела с закрывающей меткой – ошибка будет указывать на последнюю срочку кода, что затрудняет поиск проблемы.

Экранирование переменных
При использовании двойных кавычек, иногда приходится экранировать переменные.
$pet = "cat";
echo "I love my $pet Barsik!"; // переменная завершается пробелом, получаем переменную $pet
echo "I love all $pets in the world!"; // из-за окончания получаем несуществующую переменную $pets

Экранируем с помощью фигурных скобок { }
echo "I love all ${pet}s in the world!";
echo "I love all {$pet}s in the world!";

Доступ к конкретному символу в строке:
Каждый символ (по сути байт) находится в конкретной ячейке памяти и к нему можно обращаться с помощью фигурных скобок { }. При этом идет отчисление, начиная с нуля. Номер значения называется индексом строки

$name = "Vasia";
$first = $name{0}; // 0 индекс соответствует V
$second = $name{2}; // 2 индекс соответствует  s

Чтобы получить доступ к последней позиции используется – функция strlen, которая считает длину строки. Считаются не символы в строке, а количество байт.  Внимание! strlen тоже считает, начиная с нулевого индекса! Это часто непонятно начинающим, объясню подробно:

$name = "Vasia!"; // создаем переменную name со значением Vasia
$third = $name{2}; // выведем третий символ значения переменной. Так как интерпретатор считает начиная с нуля, получим: индекс 0 - V, 1 - a, 2 - s, 3 - i, 4 - a, 5 - !
echo $third; // получаем вывод: s
$count = strlen($name); // создаем переменную $count, которой присваиваем значение равное функции strlen(), которая считает сколько (количество) байт в значении переменной $name
echo $count; // функция насчитала 6 байт
// теперь допустим, что нам необходимо вывести последний символ значения переменной...
$last = $count - 1; // вычисляем последний символ (т.к. индексы строки считаются начиная с нуля, нужно вычесть 1). По факту последний символ является шестым символом в строке, но т.к. отчет идет от нуля, для интерпретатора последний символ является индексом номер 5.
echo $name{$last}; // выводим последний символ !

$preLast = $count - 2; // вычисляем предпоследний символ
echo $name{$preLast}; // выводим a

Проблема кодировок, например, русские буквы в Unicode; считаются как несколько байтов, а как символы:

$name = "Вася";
$len = strlen($name); // значение будет 8, т.к. русские буквы в Unicode

Чтобы это избежать, используем разрешение mb_strlen:
$name = "Вася";
$len = mb_strlen($name); // значение будет

5. array
Массив – это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Будет рассмотрен позже.

6. object
Объект – сущность, обладающая определённым состоянием и поведением. Будет рассмотрен позже.

7. resource
Ресурс – специальная переменная, содержащая ссылку на внешний ресурс. Будет рассмотрен позже.

8. NULL
Представляет собой переменную без значения.

 

Переменная является типом NULL, когда:
1) переменной не было присвоено ни одного значения
echo  $a;
2) переменной было присвоен тип NULL
$a = null;
3) переменная была удалена с помощью функции unset ( );
$a = 5;
unset ($a);

Пример:

$a = null; // присвоить $a значение NULL
unset($x);
echo gettype($x); // NULL

This entry was posted in PHP. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *