сколько типов данных php
Типы данных в PHP
Что такое типы данных
Каждая переменная и каждое значение в PHP имеет свой тип данных:
Типы данных в PHP
В PHP существуют следующие основные типы данных:
Строка
Строки в PHP размещаются в одинарных или двойных кавычках. Главное различие в том, что в двойные кавычки можно подставить значение переменной, например:
Другие различия будут рассмотрены в отдельном уроке.
Для PHP 7+ 64-битных сборок нет ограничений на максимальную длину строки, для остальных она составляет 2Гб.
Булев тип
Значение булева типа может содержать в себе только true или false (истина или ложь).
Булев тип удобно использовать для всяких флажков и статусов вроде отправлено/не отправлено, просмотрено/не просмотрено и т.д.
Целое число
Целые числа имеют следующие минимальные и максимальные значения:
Помимо десятичной системы счисления, PHP также поддерживает двоичную, восьмеричную и шестнадцатеричную:
Дробное число
Разделителем дробной части в PHP является точка:
С дробными числами существует проблема, характерная не только для PHP, но и для любых других языков, где используется двоичное представление чисел с плавающей точкой.
Проблема в том, что дробные числа имеют ограниченную точность, что в некоторых ситуациях может приводить к неожиданным результатам:
Оператор сравнения == возвращает true или false если два значения соответственно равны или не равны.
Поэтому когда нужно производить какие-то вычисления, где важна абсолютная точность, нужно использовать специальные функции произвольной точности:
Массив
Массивы будут подробно рассмотрены в уроке Массивы в PHP.
Объект
Объекты будут подробно рассмотрены в будущем.
Ресурс
В примере выше функция fopen возвращает ссылку на файл, которую затем можно использовать вместе с другими функциями для управления файлом.
NULL означает отсутствие значения:
Как определить тип переменной
Получить тип переменной можно с помощью функции gettype() :
Типы данных в 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). Значения регистронезависимы.
2. integer
4. string
Строки, набор символов.
Когда какие кавычки использовать — одинарные или двойные:
echo «Мама мыла \n раму»; // Слово «раму» будет перевод на новую строку благодаря \n
echo ‘Мама мыла \n раму’; // Будет выведено все, что в кавычках
Т.е. в двойных кавычках » переменные обрабатываются; одинарные ‘ выводят все буквально, как написано.
Управляющие последовательности — если строка заключена в двойные кавычки, PHP распознает управляющие последовательности для специальных символов:
\n новая строка
\r возврат каретки (возврат в начало строки)
\t горизонтальная табуляция
Т.е. если мы хотим вывести символы \n буквально, использую двойные кавычки — нужно их экранировать при помощи обратного слеша \:
echo «Мама мыла \\n раму»;
Вывести несколько строк используем HEREDOC:
echo
// тут может быть сколько угодно команд и переменных;
HERE;
HERE — является именем метки; вместо HERE можно использовать любое слово.
Противоположностью является NOWDOC:
echo
// это аналог одинарных кавычек, переменные не будут подставлены автоматически
METKA;
Проблема кодировок, например, русские буквы в Unicode; считаются как несколько байтов, а как символы:
$name = «Вася»;
$len = strlen($name); // значение будет 8, т.к. русские буквы в Unicode
Чтобы это избежать, используем разрешение mb_strlen:
$name = «Вася»;
$len = mb_strlen($name); // значение будет
5. array
Массив — это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Будет рассмотрен позже.
6. object
Объект — сущность, обладающая определённым состоянием и поведением. Будет рассмотрен позже.
7. resource
Ресурс — специальная переменная, содержащая ссылку на внешний ресурс. Будет рассмотрен позже.
8. NULL
Представляет собой переменную без значения.
PHP: Типы данных
Бывают разные способы представлять данные в программах.
Операция умножения имеет смысл для целых чисел, но не имеет смысла для строк: умножать слово «мама» на слово «блокнот» — бессмыслица.
Тип данных определяет, что можно делать с элементами конкретного множества элементов
Язык программирования распознает типы. Поэтому PHP не позволит нам умножать строку на строку («умножать текст на текст»). Но позволит умножать целое число на другое целое число. Наличие типов и таких ограничений в языке защищает программы от случайных ошибок.
В отличие от строк, числа оборачивать в кавычки не нужно. Чтобы напечатать число 5, достаточно написать:
Обратите внимание, что число 5 и строка ‘5’ — совершенно разные вещи, хотя вывод у print_r для этих данных идентичный.
Вот ещё один пример, но уже с рациональным числом:
Типы данных «строка», «целое число» и «рациональное число» — это примитивные типы, они встроены в сам язык PHP. В язык встроены также и некоторые составные типы данных, но пока мы будем работать только с примитивными. Программисты также могут создавать собственные типы данных.
(По-английски строки в программировании называются «strings», а строчки текстовых файлов называются «lines». Например, в коде выше есть три строчки (lines), и нет никаких строк (strings). В русском иногда может быть путаница, поэтому во всех уроках мы будем говорить строка для обозначения типа данных «строка», и строчка для обозначения строчек (lines) в файлах).
Задание
Советы
Определения
Типы данных — PHP: Основы
Операция умножения имеет смысл для целых чисел, но не имеет смысла для строк: умножать слово «мама» на слово «блокнот» — бессмыслица. Тип данных определяет, что можно делать с элементами конкретного множества элементов.
Язык программирования распознает типы. Поэтому PHP не позволит нам умножать строку на строку («умножать текст на текст»). Но позволит умножать целое число на другое целое число. Наличие типов и таких ограничений в языке защищает программы от случайных ошибок.
В отличие от строк, числа оборачивать в кавычки не нужно. Чтобы напечатать число 5, достаточно написать:
Обратите внимание, что число 5 и строка ‘5’ — совершенно разные вещи, хотя вывод у print_r() для этих данных идентичный.
Вот ещё один пример, но уже с рациональным числом:
Типы данных «строка», «целое число» и «рациональное число» — это примитивные типы, они встроены в сам язык PHP. В язык встроены также и некоторые составные типы данных, но пока мы будем работать только с примитивными. Программисты также могут создавать собственные типы данных.
(По-английски строки в программировании называются «strings», а строчки текстовых файлов называются «lines». Например, в коде выше есть три строчки (lines), и нет никаких строк (strings). В русском иногда может быть путаница, поэтому во всех уроках мы будем говорить строка для обозначения типа данных «строка», и строчка для обозначения строчек (lines) в файлах).
Слабая типизация
Нам известно про два разных типа данных: числа и строки. Мы, например, могли складывать числа, потому что операция сложения — это операция для типа «числа».
А что, если применить эту операцию не к двум числам, а к числу и строке?
Не все языки так делают. PHP — это язык со слабой типизацией. Он знает о существовании разных типов (числа, строки и др.), но относится к их использованию не очень строго, пытаясь преобразовывать информацию, когда это кажется разумным. В языках со строгой типизацией сложить число со строкой не получится.
PHP был создан для интернета, а в интернете вся информация — это строки. Даже когда вы вводите на сайте номер телефона или год рождения, на сервер эта информация поступает не как числа, а как строки. Поэтому авторы языка решили, что автоматически преобразовывать типы — правильно и удобно.
Такое автоматическое неявное преобразование типов с одной стороны и правда удобно. Но на практике это свойство языка создает множество ошибок и проблем, которые трудно найти. Код может иногда работать, а иногда не работать — в зависимости от того, «повезло» ли в конкретном случае с автоматическим преобразованием. Программист это заметит не сразу.
В дальнейших заданиях вы будете встречаться с таким поведением не раз. Часто будет возникать вопрос «почему мой код работает не так, как я ожидаю?».
Слабая типизация красной нитью проходит сквозь всю разработку на PHP.
Явное преобразование типов
Преобразование типов довольно частая операция в веб-разработке. С одной стороны, для её выполнения можно полагаться на слабую типизацию, с другой — во многих ситуациях лучше делать преобразование явно, используя специальный синтаксис. Такой код понятнее и предсказуемее.
Явное преобразование типа работает так: перед значением, в скобках, указывается желаемый тип. В результате значение справа преобразуется в значение другого типа, указанного слева в скобках. На текущий момент мы знакомы только с двумя типами, но преобразование работает для любого типа.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты.
Сколько типов данных php
PHP поддерживает восемь простых типов данных.
Четыре скалярных типа:
Два смешанных типа:
И два специальных типа:
В PHP обычно тип переменной явно не объявляется. Это делает сам интерпретатор во время выполнения программы в зависимости от контекста, в котором используется переменная.
Чтобы определить булев тип, используют ключевое слово TRUE или FALSE. Оба регистронезависимы.
Логические переменные используются в различных управляющих конструкциях (циклах, условиях и т.п.). Иметь логический тип, т.е. принимать только два значения, истину или ложь, могут также и некоторые операторы (например, оператор равенства). Они также используются в управляющих конструкциях (условиях, циклах и т.п.) для проверки каких-либо условий. Например, в условной конструкции проверяется истинность значения оператора или переменной и в зависимости от результата проверки выполняются те или иные действия. Здесь условие может быть истинно или ложно, что как раз и отражает переменная и оператор логического типа.
Тип integer (целый). В начале немного математики. Натуральные числа (естественные числа) — числа, возникающие естественным образом при счёте (как в смысле перечисления, так и в смысле исчисления).
Существуют два подхода к определению натуральных чисел — числа, используемые при:
Отрицательные и нецелые (рациональные, вещественные, …) числа натуральными не являются. Ноль некоторые авторы включают в множество натуральных чисел, другие — нет.
Целые числа — расширение множества натуральных чисел, получаемое добавлением к множеству натуральных чисел нуля и отрицательных чисел вида -n. Необходимость рассмотрения целых чисел продиктована невозможностью, в общем случае, вычесть из одного натурального числа другое — можно вычитать только меньшее число из большего.
Целое может быть представлено в следующих видах:
В шестнадцатеричной записи перед числом пишется префикс 0x.
В восьмеричной записи перед числом пишется префикс 0.
В двоичной записи перед числом пишется префикс 0b.
Структурно целое выглядить следующим образом:
десятичное: | 49* | 0 |
шестнадцатеричное: | 0[xX][0-9a-fA-F]+ |
восьмеричное: | 03+ |
двоичное: | 0b[01]+ |
целое | [+-]?decimal | [+-]?hexadecimal | [+-]?octal | [+-]?binary |
Тип float (с плавающей точкой). Подробно о числах с плавающей точкой (вещественных числах) в PHP можно почитать на http://php.net/manual/ru/language.types.float.php, например.
Тут кратко изложим два момента.
Числа с плавающей точкой (также известные как «float», «double», или «real») могут быть определены следующими синтаксисами:
В примере используются e3 и E-4. e3 = 10^3 = 1000. E-4 = 10^(-4) = 0,0001.
Проверять числа с плавающей точкой на равенство проблематично из-за их внутреннего представления. Тем не менее, существуют способы для их сравнения, которые работают несмотря на все эти ограничения.
Для сравнения чисел с плавающей точкой используется верхняя граница относительной ошибки при округлении. Эта величина называется машинной эпсилон или единица округления (unit roundoff) и представляет собой самую маленькую допустимую разницу при расчетах.
Контрольные вопросы и задания