<?php
// int|string
42 --> 42 // явный тип
"42" --> "42" // явный тип
new ObjectWithToString --> строка с результатом выполнения __toString()
// Объекты никогда не будут приведены к целому числу, даже если вернут "числовую строку"
42.0 --> 42 // float совместим с int
42.1 --> 42 // float совместим с int
1e100 --> "1.0E+100" // float слишком большой для типа int, преобразуется в строку
INF --> "INF" // float слишком большой для типа int, преобразуется в строку
true --> 1 // bool совместим с int
[] --> TypeError // array не совместим ни с int ни со string
// int|float|bool
"45" --> 45 // целочисленная "чистовая строка"
"45.0" --> 45.0 // "чистовая строка" с плавающей точкой
"45X" --> true // не "чистовая строка", приведётся к bool
"" --> false // не "чистовая строка", приведётся к bool
"X" --> true // не "чистовая строка", приведётся к bool
[] --> TypeError // array не совместим ни с int ни с float ни с bool
?>