Скалярные
- bool
- int
- float
- string
Составные
- array
- object
- callable — вызываемые функции
- iterable
Специальные
- resourse — пути к файлам или api и тд
- null
gettype($var); // вернет тип переменной
var_dump($var); // вернет тип и значение
//php имеет динамическую типизацию, но если нам такое не надо то
declare(strict_types=1); // так называемый строгий режимДопустимые преобразования типов
(int)$variable - cast to int
(bool)$variable - cast to bool
(float)$variable - cast to float
(string)$variable - cast to string
(array)$variable - cast to array
(object)$variable - cast to object
(unset)$variable - cast to NULLBoolean
$isComplite = true; // не база а целый генштаб
// integers 0 -0 будут преобразованы в false
// floats 0.0 -0.0 будут преобразованы в false
// Тоже самое для '' '0' [] null
echo $isComplite; // 1 ну а для false пустая строкаInteger
PHP_INT_MIN , PHP_INT_MAX //покажут лимиты для чисел
$x = 10; //что может быть проще
$x = 0x2A; // 16я система, в 10 это 42
echo PHP_INT_MAX + 1; // допустимо но вывод будет в типе float
echo (int) '5.9'; // 5 дробная часть отбрасывается
echo (int) 'dadada'; // 0 в случае если преобразовать нельзя
is_int($x); // является ли целым числом
$x = 2_000_000_000; // после 7.4 это считается нормальным числом, просто для удобства
echo (int)'2_000_000_000'; //2 такая вот особенностьFloat
$x = 13.5;
$x= 13.5e3; // 13500
$x= 13.5e-3; // 0.0135
PHP_FLOAT_MIN , PHP_FLOAT_MAX //покажут лимиты для чисел
//удивительное крепление для рук
floor((0.1 + 0.7) * 10) // неожиданно 7 а не 8 - округление в меньшую сторону
ceil((0.1 + 0.7) * 10) // 8 как и ожидалось - округление в большую сторону
ceil((0.1 + 0.2) * 10) // 4, округляем 0.30000000000000004 в большую сторону
// сравнивать числа с плавающей точкой - фатальная ошибка
1 - 0.77 != 0.23 // живи теперь с этим
PHP_FLOAT_MAX + 1 = INF; // за буйки не заплываем
$x= '10.12a'; $y = 'dasdads';
echo (float)$x, ' ', (float)$y; // 10.12 0String
Строка — есть последовательность символов.
$name = 'Bezdel`nik';
echo $name[0]; // B Обращение к символу по его индексу
echo $name[-1]; // k обратная нумерация, начинается с 1
$name[99] = 'I'; // допустимо выйти за размер строки, пустые позиции заполняются пробелами
//варианты подготовки текста позволяющие избежать излишних конкатенаций и экранирований
// чувстивтельно к пробелам, табуляциям и прочим отступам
// Heredoc
$text = <<<TEXT
можно и просто так $x
<p>а можно и с тегами $y </p>
TEXT;
// Nowdoc - в этом варианте переменные остаются в виде текста
$text = <<<'TEXT'
Line 1 $x
Line 2 $y
TEXT;
echo nl2br($text); // вывод с учетом переноса строкиNULL
is_null($x); // проверка
$x === NULL; // допустимая проверка
var_dump($y); // Warning увидим если переменная не определена, но в дампе будет NULL
var_dump((string)$x); // '' пустая строка
var_dump((int)$x); // 0
var_dump((bool)$x); // falseArray
$lang = array('PHP','Java','Python'); // для бумеров
$lang = ['PHP','Java','Python']; // для зумеров
echo $lang[1]; // Java
echo $lang[-1]; // Warning, за это бан
echo $lang[99]; // Warning, за это бан
isset($lang[99]); // проверка на существование ключа вернет true или false так же false если значение ключа NULL
array_key_exists(ключ, масиив); //проверка только на то что ключ есть
echo '<pre>', print_r($lang), '</pre>'; // допустимый вывод массива
count($lang); // 3 - размер массива
$lang[] = 'value'; // добавит элемент в конец массива
array_push($lang,'C','C++','GO'); // добавление нескольких элементов в конец
// ассоциативный массив
$lang = [
'php' => '8.0',
'python' =>'3.9.1',
];
$lang['php']; // 8.0
// многомерные массивы
$lang = [
'php' => [
'version' => '8.0',
'someData' => [
'explain' => 'и так сколько угодно',
],
'arrays' =>[
[1,2,3],
[1,2,3]
]
]
]
echo $lang['php']['version']; // 8.0
//нумерация автоматическая
$lang['php', 'go', 50 => 'C', 'C++']; // [0]=>php, [1]=>go, [50]=>C, [51]=>C++
array_pop($lang); // удалит последний элемен
array_shift($lang);
// удалит первый элемент
// нумерация произойдет заного если индексы были числовые
// индексы строчные останутся без изменений
unset($lang[2]); //удаляет конкретный элемент, переиндексация не происходит