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

0

Это вопрос о внутренних функциях 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 Small Pigs"? Может ли это быть сделано при типизации (внутренне), или это требует какой-то обработки строк с включенным преобразованием символов или что-то еще?

Теги:
casting
types
internals

2 ответа

1

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

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

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

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

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

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

В большинстве случаев, что он делает во всех этих случаях, это то, что интуитивно кажется "правильным" из синтаксиса и вероятной семантики.

  • 0
    это действительно интересная вещь, которую нужно знать, но она не отвечает на мой вопрос, я думаю: это не объясняет, как php решает / определяет тип переменной, когда интерпретатор перебирает строку, которая говорит $a=3 . Хорошо, PHP автоматически конвертирует переменные, но откуда он знает тип, в который нужно конвертировать? Можно ли сделать это так просто, как кажется, когда вы говорите «если в нем есть строка ...»? Php определяет только по кавычкам, должна ли переменная быть строкой при инициализации? Это как-то меня смущает
  • 0
    Я добавил некоторые объяснения простых заданий.
0

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

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

(PHP 4, PHP 5)

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

int intval (mixed $ var [, int $ base = 10])

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню