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

标签 php casting

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

相关文章:

php - 将 HTML 保存到数据库/SQL 中

php - php中如何对评论的评论进行整理

php - 如何获取MySql中列出的列中的所有值 - php

objective-c - 为什么我需要将 self 转换为 id?

scala - 将变量强制转换为 Scala 中的方法 "Runtime Evaluation"

php - 有没有办法在不到 2 分钟的时间内从 txt 文件更新 12000 多行?

php - MySQL服务器不见了

类的 Java 转换接口(interface)

c++ - 防止在 C++ 的构造函数中隐式转换数字类型

c# - 为什么 <enum> 的集合无法转换为 <int?>?