PHP 总是需要知道一个值的“当前类型”,然后才能将它用于任何目的,包括初始化变量。这种“当前类型”是与所有值一起使用的元数据(枚举)。
在您的示例代码中,强制转换是没有意义的,因为您正在使用文字值初始化变量,这些值总是显而易见的类型:
$s = "foo";
echo is_string($s); // 1
$s = (string)"foo";
echo is_string($s); // also 1
整数和数组也是如此。
至少在一种情况下,变量的类型与您乍一看可能会有所不同:
$i = PHP_INT_MAX + 1; // or use something like 999999999999
echo gettype($i); // "double"!
在这种情况下,使用强制转换会生成$i
一个整数,但它也会改变它的值:
$i = (int)(PHP_INT_MAX + 1);
echo gettype($i); // "integer"
echo $i; // a very large negative number -- what?!?
当然,这不是由于缺少强制转换造成的,而是 PHP 中如何处理数字的人工制品。所以结论很清楚:在使用 literals 初始化时使用强制转换毫无意义。
如果您要使用不同类型 Y(或未知类型)的值初始化您打算用作类型 X 的变量,那么有理由使用显式强制转换:在代码中记录变量的运行方式以后可以使用。但不要高估它的好处:这些信息仅供人类使用;每当您尝试将变量用作与它不同的类型时,PHP 都会自动进行通常的类型转换。