MakeType - преобразовать переданное значение к заданному типу

В PHP не требуется строгого определения типа переменной. Каждая переменная может поменять свой тип в зависимости от контекста кода. Это и плохо и хорошо. Хорошо то, что в большинстве случаев можно не думать о типе переменной, но существуют ситуации, когда такая универсальность вызывает многозначные толкования и может быть источником ошибок. Это плохо. Например: при формировании упорядоченных списков или массивов, или когда требуется работа с размерностями в числах с плавающей точкой (и в других случаях, когда PHP требует точного указания типа переменной).

В этих случаях можно воспользоваться процедурой приведения типов или употребить функцию MakeType. Что применять определяется требованиями Вашего стиля программирования.

Функция MakeType унифицирует способ преобразования для четырех типов данных: tInt - integer, целое число (из множества {...,-2,-1,0,1,2,...}); tFloat - double, число с плавающей точкой; tStr - string, набор символов=байт (256 различных значений); tBool - boolean, простейший тип, выражающий истинность значения.

Здесь переданное значение приводится к заданному типу и возвращается в соответствии с указанной константой типа. Если преобразование невозможно, то возвращается null вместе с сообщением о неблагоприятном исходе преобразования.

Синтаксис

$Result=MakeType($Value,$Type,$ModeError=rvsTriggerError);

Параметры

$Value - значение переменной, которое следует привести к заданному типу;
$Type - константа, определяющая тип значения: integer, double, string,
   boolean.
$ModeError - режим вывода сообщений об ошибке (по умолчанию через 
   исключение с пользовательской ошибкой на сайте doortry.ru)

Возвращаемое значение

$Result - значение, переданное функции и преобразованное к заданному типу
   или null, если тип значения указан неверно или преобразование невозможно

Зарегистрированные ошибки/исключения

ConversNotPossible - "Тип значения указан неверно или преобразование невозможно";
<?php namespace prown;

// PHP7/HTML5, EDGE/CHROME                                 *** MakeType.php ***
// ****************************************************************************
// * TPhpPrown                        Преобразовать значение к заданному типу *
// *                                                                          *
// * v1.2, 07.03.2020                              Автор:       Труфанов В.Е. *
// * Copyright © 2018 tve                          Дата создания:  26.04.2018 *
// ****************************************************************************

require_once 'iniConstMem.php';
require_once 
'iniErrMessage.php';
require_once 
'MakeUserError.php';

function 
MakeType($Value,$Type,$ModeError=rvsTriggerError)
{
   if (
$Type==tInt
   {
      
$Result=intval($Value);
   }
   elseif (
$Type==tFloat
   {
      
$Result=floatval($Value);
   }
   elseif (
$Type==tStr
   {
      
$Result=strval($Value);
   }
   elseif (
$Type==tBool
   {
      
// Выполняем преобразование к логическому значению,
      // в итоге null - это false, 1 - это true
      
$Result=$Value;
      
settype($Result,tBool);
   }
   else 
   {
      
$Result=null;
      
// Выводим сообщение "Неверный тип значения или преобразование невозможно!"
      
MakeUserError(ConversNotPossible.' [значение='.$Value.', тип: '.$Type.']','TPhpPrown',$ModeError);
   }
   return 
$Result;
}
// *********************************************************** MakeType.php *** 


Сообщения выполненного теста функции


MakeType

$string="1958"; $Result=prown\MakeType($string,tInt); ................ Преобразование строчного "1958" к целому 1958
$string="3.1415926"; $Result=prown\MakeType($string,tFloat); ......... Преобразование строки "3.1415926" к числу 3.1415926
[TPhpPrown] Неверный тип значения или преобразование невозможно [значение=1958, тип: 135]
$Result=prown\MakeType("1958",135,rvsCurrentPos); .................... Преобразование строчного "1958" к целому, но тип указан неверно
$value=0; $Result=prown\MakeType($value,tBool); ...................... Преобразования целого = 0 к логическому типу: False
$value=1; $Result=prown\MakeType($value,tBool); ...................... Преобразования целого = 1 к логическому типу: True
$value=-1; $Result=prown\MakeType($value,tBool); ..................... Преобразования целого = -1 к логическому типу: True
$Result=prown\MakeType(100,tBool); ................................... Преобразования целого = 100 к логическому типу: True
$value=10; $Result=prown\MakeType($value,tStr); ...................... Преобразования целого = 10 к cимвольному значению: "10"
$value=0; $Result=prown\MakeType($value,tStr); ....................... Преобразования целого = 0 к cимвольному значению: "0"

1/1 test cases complete: 13 passes, 0 fails and 0 exceptions.