Это не значит, что echo
меняет тип чего-либо.
echo()
- это языковая конструкция, параметры которой будут рассматриваться как строки. Таким образом, он ожидает жало, поскольку каждый параметр передается ему.
PHP на уровне языка, однако, не имеет никаких проблем с типами данных, поскольку это динамический свободно типизированный язык (как Lisp или Perl, и по сравнению со строгой типизацией Python или C).
Итак, даже если (почти) 1 все, что вы говорите, в основном является выражением, каждое из этих предложений имеет возвращаемое значение.
Каждое значение имеет внутренний тип. Скажем, например, что 4
является значением типа integer
. Это всегда будет правдой.
Таким образом, если вы проверяете целостность типа, isint(4)
всегда будет возвращать значение true
(типа boolean
).
Однако подход в PHP заключается в том, что именно язык должен заботиться о переходе к нужным типам во время выполнения, а не о том, что программисту приходится думать о типах переменных, которые в некоторых случаях могут даже изменяться. (как общая конструкция функции быстрой сортировки).
Таким образом, всякий раз, когда вы используете выражение как часть другого, происходит процесс вывода типа, с помощью которого каждое подвыражение переводится в выведенный тип (с помощью части супер-выражения, которая уже была проанализирована).
Допустим, у нас есть выражение "13" . 37
. В PHP .
является оператором конкатенации строк.
"13"
является выражением string
-типа. Итак, правый оператор .
должен быть строкой. Так как это не так, Zend Engine ищет простой способ продвижения целочисленного выражения 37
в строку. Он находит один: строка "37"
, сгенерированная C printf("%d", value)
-подобным выражением.
Тот же процесс вывода происходит с любым типом данных. Это может несколько беспокоить в продвинутых темах программирования, поскольку нужно не только проверять значение выражения, но и его тип, поскольку автоматическое продвижение типов может вызывать значение истинности, которое может иметь наивный программист. не проверяется, не имея дело с типами выражений.
Это особенно верно в таких средах, как:
if ($anything == 6) { /* Will be triggered also with "6" */ }
elseif (!$anything) { /* will be triggered with the empty string too */ }
elseif (is_string($anything)) { /* will not be triggered with "6" nor "" because of the else */ }
elseif ($anything == true) { /* will be triggered with anything that is not false:
1, "1", 4, "anything", myObjectInstance(), AND also with the
string "false", that is promoted to boolean true. (Boolean false is the empty string) */ }
Если вы ищете ASCII-представление байта, используйте chr ()
1 Существуют исключения, такие как конструкция namespace
, конструкция declare
, это не Лисп: -D