Это вопрос о внутренностях 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 маленьких свиней»? Может ли это быть сделано путем приведения типов (внутренне) или это требует какой-либо обработки строк с включенным преобразованием символов или чего-то еще?
PHP будет автоматически преобразовывать значения из одного типа в другой по мере необходимости. Если переменная содержит строку, но вы используете ее в арифметическом выражении, она преобразует ее в число. Если он содержит число, но вы используете его в качестве аргумента функции, которой требуется строка, он преобразует ее в строку.
Когда вы выполняете сравнения, если типы двух значений различны, одно из них будет преобразовано в другой тип (если вы не используете «строгие» операторы сравнения, ===
а также !==
). таблицы сравнения типов объясните, какие будут преобразованы в зависимости от двух типов.
Когда вы делаете начальные задания, как
$a = 3;
$b = "3";
$c = false;
это смотрит на синтаксис. Если значение в кавычках, то это строка. Если значение является голым числом, это число. Так $a
содержит число, $b
содержит строку $c
содержит логическое значение, поскольку оно было назначено из логического литерала.
Если вы присваиваете переменную с помощью вызова функции, это зависит от того, что возвращает функция (например, substr
возвращает строку); все стандартные функции PHP имеют свои возвращаемые типы, указанные в документации.
В большинстве случаев во всех этих случаях интуитивно кажется «правильным» синтаксис и вероятная семантика.
Для второго вопроса вы можете использовать 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.