Php объявить тип переменной

Php объявить тип переменной

PHP is a dynamically typed language, which means that by default there is no need to specify the type of a variable, as this will be determined at runtime. However, it is possible to statically type some aspect of the language via the use of type declarations.

Types restrict the kind of operations that can be performed on them. However, if an expression/variable is used in an operation which its type does not support, PHP will attempt to type juggle the value into a type that supports the operation. This process depends on the context in which the value is used. For more information, see the section on Type Juggling.

The type comparison tables may also be useful, as various examples of comparison between values of different types are present.

Note: It is possible to force an expression to be evaluated to a certain type by using a type cast. A variable can also be type cast in-place by using the settype() function on it.

To check the value and type of an expression, use the var_dump() function. To retrieve the type of an expression, use the get_debug_type() function. However, to check if an expression is of a certain type use the is_ type functions instead.

$a_bool = true ; // a bool
$a_str = «foo» ; // a string
$a_str2 = ‘foo’ ; // a string
$an_int = 12 ; // an int

Читайте также:  Java heap space ram

echo get_debug_type ( $a_bool ), «\n» ;
echo get_debug_type ( $a_str ), «\n» ;

// If this is an integer, increment it by four
if ( is_int ( $an_int )) $an_int += 4 ;
>
var_dump ( $an_int );

// If $a_bool is a string, print it out
if ( is_string ( $a_bool )) echo «String: $a_bool » ;
>
?>

Output of the above example in PHP 8:

Note: Prior to PHP 8.0.0, where the get_debug_type() is not available, the gettype() function can be used instead. However, it doesn’t use the canonical type names.

User Contributed Notes

Источник

Php объявить тип переменной

Для получения типа переменной применяется функция gettype() , которая возвращает название типа переменной, например, integer (целое число), double (число с плавающей точкой), string (строка), boolean (логическое значение), null , array (массив), object (объект) или unknown type . Например:

Также есть ряд специальных функций, которые возвращают true или false в зависимости от того, представляет ли переменная определенный тип:

  • is_integer($a) : возвращает значение true , если переменная $a хранит целое число
  • is_string($a) : возвращает значение true , если переменная $a хранит строку
  • is_double($a) : возвращает значение true , если переменная $a хранит действительное число
  • is_numeric($a) : возвращает значение true , если переменная $a представляет целое или действительное число или является строковым представлением числа. Например:
$a = 10; $b = "10"; echo is_numeric($a); echo "
"; echo is_numeric($b);

Установка типа. Функция settype()

С помощью функции settype() можно установить для переменной определенный тип. Она принимает два параметра: settype(«Переменная», «Тип») . В качестве первого параметра используется переменная, тип которой надо установить, а в качестве второго — строковое описание типа, которое возвращается функцией gettype() .

Если удалось установить тип, то функция возвращает true , если нет — то значение false .

Например, установим для переменной целочисленный тип:

Поскольку переменная $a представляет действительное число 10.7, то его вполне можно преобразовать в целое число через отсечение дробной части. Поэтому в данном случае функция settype() возвратит true .

Преобразование типов

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

Для явного преобразования перед переменной в скобках указыется тип, в который надо выполнить преобразование:

$boolVar = false; $intVar = (int)$boolVar; // 0 echo "boolVar = $boolVar
intVar = $intVar";

В данном случае значение «false» пробразуется в значение типа int , которое будет храниться в переменной $intVar . А именно значение false преобразуется в число 0. После этого мы сможем использовать данное значение как число.

При использовании выражения echo для вывода на страницу передаваемые значения автоматически преобразуются в строку. И поскольку переменная boolVar равна false , ее значение будет преобазовано в пустую строку. Тогда как значение 0 преобразуется в строку «0».

В PHP могут применяться следующие преобразования:

  • (int), (integer) : преобразование в int (в целое число)
  • (bool), (boolean) : преобразование в bool
  • (float), (double), (real) : преобразование в float
  • (string) : преобразование в строку
  • (array) : преобразование в массив
  • (object) : преобразование в object

Источник

Php объявить тип переменной

В отличие от ряда языков программирования в PHP при определении переменных или параметров функций можно не указывать тип данных. Однако в принципе PHP в ряде ситуаций — при определении свойств классов, параметров или возвращаемого значения функций — позволяет указать тип данных. Установка типа данных позволит избежать ситуаций, когда в программу будут переданы данные не тех типов, которые ожидалась разработчиком.

function isPositive($number) < return $number >0; > $result = isPositive("-Youdontknowwhoiam"); if($result) echo "положительное"; else echo "отрицательное или равно нулю";

В данном случае функция isPositive() очевидно ожидает, что в качестве параметра будет передано число, чтобы установить, больше оно нуля или нет. Тем не менее при вызове функции мы можем передать в нее произвольное значение. Чтобы оградиться от подобным ситуаций необходимо явным образом указать, что функция может принимать только число, то есть типизировать параметр функции.

Определение типа

Какие определения типов могут использоваться при типизации:

  • bool : допустимые значения true и false
  • float : значение должно число с плавающей точкой
  • int : значение должно представлять целое число
  • string : значение должно представлять строку
  • mixed : любое значение
  • callable : значение должно представлять функцию
  • array : значение должно представлять массив
  • iterable : значение должно представлять массив или класс, который реализует интерфейс Traversable . Применяется при переборе в цикле foreach
  • Имя класса: объект должен представлять данный класс или его производные классы
  • Имя интерфейса: объект должен представлять класс, который реализует данный интерфейс
  • Self : объект должен представлять тот же класс или его производный класс. Может использоваться только внутри класса.
  • parent : объект должен представлять родительский класс данного класса. Может использоваться только внутри класса.

Типизация параметров функции

При типизации параметров тип указывается перед названием параметра:

function isPositive(int $number) < return $number >0; > $result1 = isPositive(25); // норм - 25 число $result2 = isPositive("25"); // норм - PHP может преобразовать значение в число $result3 = isPositive("-Youdontknowwhoiam"); // Ошибка TypeError

В данном случае параметр $number должен представлять тип int , то есть целое число. Поэтому при вызове функции мы должны передать в функцию целочисленное значение. Если будет передано значение другого типа, то PHP попытается преобразовать значение. В некоторых случаях такое преобразование можно завершится успешно:

В других случаях прееобразование может завершится неудачно, и программа завершит выполнение с ошибкой TypeError :

$result3 = isPositive("-Youdontknowwhoiam");
function sum(array $numbers, callable $condition) < $result = 0; foreach($numbers as $number)< if($condition($number)) < $result += $number; >> return $result; > $isPositive = function($n) < return $n >0;>; $myNumbers = [-2, -1, 0, 1, 2, 3, 4, 5]; $positiveSum = sum($myNumbers, $isPositive); echo $positiveSum; // 15

В данном случае параметры функции должный представлять массив и другую функцию (тип callable ). В качестве функции можно передать анонимную функцию.

Типизация возвращаемого значения

Для установки типа возвращаемого из функции значения после списка параметров указывается двоеточие : и после него тип данных:

function isPositive (int $number) : bool < return $number >0; > $result = isPositive(34);

В данном случае функция isPositive должна возвращать значение типа bool , то есть true или false .

Другой пример — возвращение функции:

function select($n): callable< switch($n)< case 1: return function($a, $b) ; case 2: return function($a, $b) ; case 3: return function($a, $b) ; default: return function($a, $b) ; > > $selection = select(2); echo $selection(4,5); // -1

Особо стоит отметить ключевое слово static , добавленное в PHP 8, которое применяется, если надо возвратить из метода класса объект этого же класса:

class Node < function generate() : static< return new Node(); >> $node1 = new Node(); $node2 = $node1->generate();

Типизация свойств

В качестве типа свойств может применяться любой тип кроме callable :

class Person < public $name; public int $age; >$tom = new Person(); $tom->name = "Tom"; $tom->age = 36; // корректное значение echo $tom->age; // 36 $tom->age = "36"; // корректное значение, так как PHP может преобразовать в число echo $tom->age; // 36 $tom->age = "thirty-eight"; // некорректное значение, возникнет ошибка TypeError echo $tom->age;

В данном случае явным образом определено, что свойство $age представляет именно тип int , то есть целое число. Соответственно этому свойству мы сможем присвоить только целое число.

Стоит учитывать, что свойство, для которого не указан тип данных, по умолчанию имеет значение null . Тогда как свойство, для которого указан тип, неинициализировано, то есть не имеет никакого конкретного значения.

Соответственно если нетипизированное свойство мы сможем использовать, то при попытке обратиться к типизированному, но неинициализиованному свойству программа завершит выполнение ошибкой:

$tom = new Person(); echo $tom->name; // норм - null echo $tom->age; // ошибка - свойство неинициализировано

Тип Union

В PHP 8 был добавлен тип union или объединение, который по сути представляет объединение типов, разделенных вертикальной чертой | . Например, мы хотим написать функцию сложения чисел, и чтобы в функцию можно было передавать только числа. Однако числа в PHP предствлены двумя типами — int и float . Чтобы не создавать по функции для каждого типа, применим объединения:

function sum(int|float $n1, int|float $n2,): int|float < return $n1 + $n2; >echo sum(4, 5); // 9 echo "
"; echo sum(2.5, 3.7); // 6.2

В данном случае мы говорим, что параметры $n1 и $n2 могут представлять как тип int , так и тип float . Аналогично возвращаемое значение также может представлять либо int , либо float .

Источник

Php объявить тип переменной

While waiting for native support for typed arrays, here are a couple of alternative ways to ensure strong typing of arrays by abusing variadic functions. The performance of these methods is a mystery to the writer and so the responsibility of benchmarking them falls unto the reader.

PHP 5.6 added the splat operator (. ) which is used to unpack arrays to be used as function arguments. PHP 7.0 added scalar type hints. Latter versions of PHP have further improved the type system. With these additions and improvements, it is possible to have a decent support for typed arrays.

function typeArrayNullInt (? int . $arg ): void >

function doSomething (array $ints ): void (function (? int . $arg ) <>)(. $ints );
// Alternatively,
( fn (? int . $arg ) => $arg )(. $ints );
// Or to avoid cluttering memory with too many closures
typeArrayNullInt (. $ints );

function doSomethingElse (? int . $ints ): void /* . */
>

$ints = [ 1 , 2 , 3 , 4 , null ];
doSomething ( $ints );
doSomethingElse (. $ints );
?>

Both methods work with all type declarations. The key idea here is to have the functions throw a runtime error if they encounter a typing violation. The typing method used in doSomethingElse is cleaner of the two but it disallows having any other parameters after the variadic parameter. It also requires the call site to be aware of this typing implementation and unpack the array. The method used in doSomething is messier but it does not require the call site to be aware of the typing method as the unpacking is performed within the function. It is also less ambiguous as the doSomethingElse would also accept n individual parameters where as doSomething only accepts an array. doSomething’s method is also easier to strip away if native typed array support is ever added to PHP. Both of these methods only work for input parameters. An array return value type check would need to take place at the call site.

If strict_types is not enabled, it may be desirable to return the coerced scalar values from the type check function (e.g. floats and strings become integers) to ensure proper typing.

same data type and same value but first function declare as a argument type declaration and return int(7)
and second fucntion declare as a return type declaration but return int(8).

function argument_type_declaration(int $a, int $b) return $a+$b;
>

function return_type_declaration($a,$b) :int return $a+$b;
>

Источник

Оцените статью