我知道 PHP 是一种弱类型语言。我的问题是:总的来说,考虑到安全性和效率问题,是否需要将 PHP 中的变量初始化为特定类型?或者这会是无谓地逆流而上吗?
具体初始化的例子:
$name = (string) "PHP"; // string
$pizzaToppings = array("tomato", "cheese", "pepperoni"); // array
$angle = (integer) 60; // integer
以下文章对我的问题有帮助,但没有回答: PHP Typecasting - Good or bad?
最佳答案
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 处理数字的方式造成的。所以结论很明确:在用文字初始化时使用强制转换没有意义。
如果您正在初始化一个您打算用作类型 X 的变量,其值是不同类型 Y(或未知类型),那么有理由使用显式转换:在代码中记录如何变量将在以后使用。但不要高估其好处:此信息仅供人类使用;每当您尝试将变量用作与实际不同的类型时,PHP 将自动执行通常的类型转换。
关于php - PHP 中的类型转换 - 安全和效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445334/