Как php определяет необходимый внутренний тип переменной?

Это вопрос о внутренностях PHP и как это работает под капотом:

Как php решает, что:

$a = 3;

должно быть целым числом (внутренне)?

и как это

$a = "3";

должна быть строка?

Однажды я слышал, что PHP использует для приведения каждой переменной (к различным типам), чтобы определить необходимый ей внутренний тип данных, но при попытке проверить это утверждение я не смог ничего найти в Интернете.

На официальном документе PHP есть несколько странных примеров, которые описывают некоторые странные особенности языка:

источник: http://php.net/manual/en/language.types.type-juggling.php

<?php
$foo = "0";  // $foo is string (ASCII 48)
$foo += 2;   // $foo is now an integer (2)
$foo = $foo + 1.3;  // $foo is now a float (3.3)
$foo = 5 + "10 Little Piggies"; // $foo is integer (15)
$foo = 5 + "10 Small Pigs";     // $foo is integer (15)
?>

но это не отвечает на мой вопрос.

Это просто показывает, насколько динамичен PHP на очень непонятном пути.

Я не думаю, что это имеет какое-либо отношение к оценке (например, «»: = false, но «abc»: = true), не так ли?

Еще один вопрос: как php может извлечь «примитивное» целое число из строки типа «10 маленьких свиней»? Может ли это быть сделано путем приведения типов (внутренне) или это требует какой-либо обработки строк с включенным преобразованием символов или чего-то еще?

0

Решение

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

Когда вы выполняете сравнения, если типы двух значений различны, одно из них будет преобразовано в другой тип (если вы не используете «строгие» операторы сравнения, === а также !==). таблицы сравнения типов объясните, какие будут преобразованы в зависимости от двух типов.

Когда вы делаете начальные задания, как

$a = 3;
$b = "3";
$c = false;

это смотрит на синтаксис. Если значение в кавычках, то это строка. Если значение является голым числом, это число. Так $a содержит число, $b содержит строку $c содержит логическое значение, поскольку оно было назначено из логического литерала.

Если вы присваиваете переменную с помощью вызова функции, это зависит от того, что возвращает функция (например, substr возвращает строку); все стандартные функции PHP имеют свои возвращаемые типы, указанные в документации.

В большинстве случаев во всех этих случаях интуитивно кажется «правильным» синтаксис и вероятная семантика.

1

Другие решения

Для второго вопроса вы можете использовать intval.

С php.net, http://php.net/manual/en/function.intval.php

(PHP 4, PHP 5)

intval — получает целочисленное значение переменной

int intval (смешанный $ var [, int $ base = 10])

Возвращает целочисленное значение переменной var, используя указанную базу для
конвертация (по умолчанию используется база 10). intval () не должен использоваться на
объекты, при этом будут выдавать ошибку уровня E_NOTICE и возвращать 1.

0

По вопросам рекламы [email protected]