
Всем привет и давайте разбираться для чего нужно вообще приводить данные к определенному типу и обрабатывать специальными функциями.
Ну во первых чтобы минимизировать в программе вероятность возникновения ошибок, так как в php нет строгой типизации переменных.
А во вторых как мы знаем , все данные ввода которые приходят от пользователя нужно обязательно проверять и обрабатывать, только так мы можем уберечь себя от взлома.
Давайте сначала рассмотрим основные , самые используемые типы php:
boolean - булевое значение(true или false)
Integer - целое цисло(10)
float - число с плавающей точкой(5.5)
string - строка("Привет мир!")
array - массив(['a','b'])
object - объект () ({ ["scalar"]=> string(12) "Привет" })
resourse - ссылка на внешний ресурс( не требует приведения)
null - значение не определено( не требует приведения)
И так давайте непосредственно разберем приведение данных к определенным типам, пойдем по порядку:
Для того чтобы привести данные к булевому значению (boolean) можно воспользоваться функцией (boolean) пример:
$str_empty = (boolean)"";
echo $str_empty ;
$str = (boolean)'str';
echo $str ;
тут как видите мы пытаемся привести нашу строку к булевому значению, если строка пустая , то нам ничего не возвращается в php это означает false. Если же строка содержит какие либо символы , то вернется 1 true. Это значит что данная функция после приведения возвращает только два значения пустую строку(false) или единицу(true).
Да кстати для того чтобы проверить тип данных в php существует функция gettype:
$str = (boolean)'str';
echo gettype($str) ;
как видите нам вернулся наш тип boolean.
Едем дальше и теперь для того чтобы данные привести к целому числу используется функция (int) пример:
$number = (int)'10cd';
echo $number;
echo "<br/>";
$number2 = (int)'sdcds';
echo $number2;
echo "<br/>";
echo gettype($number) ;
здесь у нас в первом выводе строка 10cd была преобразована в целое число 10, отмечу что число должно быть в начале строки иначе нам вернется 0, во втором случае 'sdcds' нам вернулось 0, так как признаков числа в строке обнаружено не было. Итог если при обработке функцией (int) данные невозможно представить в виде числа , то данная функция вернет нам 0. Повторюсь что признаки числа должны быть в самом начале.
Рассмотрим похожий тип данных, но уже это число с плавающей точкой(float):
$number = (float)'10cc2d';
echo $number;
echo "<br/>";
$number2 = (int)'sdcds';
echo $number2;
echo "<br/>";
echo gettype($number) ;
если присмотреться , то у нас получился такой же результат как и при работе с функцией (int) , только тип данных поменялся на double . В чем же разница! Давайте рассмотрим:
$number = (float)'10.5cc2d';
echo $number;
у нас вернулось 10.5 при использовании функции (int) число округлилось бы до 10. Вот такая вот разница.
Что касается строковых значений:
$string = (string)true;
echo $string;
echo "<br/>";
echo gettype($string) ;
вернулось значение единица в виде строки , как и следовало ожидать:
$string = (string)10;
echo $string;/*10*/
$string = (string)['a','b'];
echo $string;/*array*/
При приведении числового значения у нас вернулось число в виде строки, если в качестве данных будет выступать массив, нам вернется просто строка 'array'.
Далее у нас идет тип данных массив(array):
$array = (array)10.4;
echo $array[0];
echo "<br/>";
echo gettype($array) ;
тут как видите мы использовали функцию (array) ,а дальше после приведения обратились к элементу нашего массива с индексом 0. Если мы хотим полностью посмотреть на наш массив, то в php существует специальная отладочная функция ptint_r()
$array = (array)'cds';
print_r($array);
echo "<br/>";
echo gettype($array);
как и следовало ожидать нам вернулся массив с его структурой. Array(0 => cds)
И на последок нам остается разобрать приведение данных к типу объект:
$object = (object)'String';
echo $object;
echo "<br/>";
echo gettype($object);
данное обращение через echo после приведения данных к типу объект приведет нас к ошибке, давайте попробуем обратится через отладочную функцию print_r()
$object = (object)'cds';
print_r($object);
после данных строк нам вернется значение и объект класса Object , как видим наше значение идентифицируется свойством scalar, следовательно обратившись к нему мы сможем получить наше значение.
$object = (object)10;
echo $object->scalar;
мы привели число 10 к типу объект и обратившись к свойству scalar объекта $object получили наше число.
И так дорогие друзья на этом данная статья подошла к концу.
Я очень надеюсь что вы не будете пренебрегать данными приведениями к типам при написании своего кода на PHP и тем самым убережете себя от множественных ошибок и взлома. Конечно для проверки данных которые приходят со стороны пользователя этого не достаточно. Но это уже совершенно другая история и тема для новой статьи.
Я желаю вам удачи и успехов. Берегите себя.
Пока!