gpt4 book ai didi

php - PHP 中的类型转换 - 安全和效率

转载 作者:可可西里 更新时间:2023-11-01 12:35:36 26 4
gpt4 key购买 nike

我知道 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com