首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP为什么显式类型转换+1有效,但不适用于增量运算符

PHP为什么显式类型转换+1有效,但不适用于增量运算符
EN

Stack Overflow用户
提问于 2018-06-19 07:06:14
回答 1查看 102关注 0票数 2

我想显式地转换一个变量,而不考虑输入,并在类型转换之后递增它,而不是使用原始变量。例如,不是这样的:

代码语言:javascript
复制
$num = "47 downvotes";
(int) ++$num;

我正在寻找类似于这个psuedo编码版本的东西,或者它的变体:

代码语言:javascript
复制
$num = "value";
++((int) $num);

对于松散的PHP,我真的希望这能起作用,但如果不先创建另一个变量,我就不能使用前增量运算符。

代码语言:javascript
复制
$num = "value";
$cast = (int) $num;
echo ++$cast;

在测试过程中,我发现PHP足够松散,只需添加一个数字即可工作:

代码语言:javascript
复制
$num = "47 dogs";
echo ((int) $num) + 1;

我也理解我的第一个例子是正确的,但同样,出于任意原因,我需要确保它在递增/递减之前被强制转换。

所以问题是,为什么PHP足够宽松,可以让后者进行编译?

EN

回答 1

Stack Overflow用户

发布于 2018-06-19 07:34:36

使用显式类型转换时,必须将结果赋给一个变量。在您的示例中,当变量是字符串时,您将尝试递增变量,这将失败,或者不会在与类型转换结合使用时产生预期的结果。

请看您的原始示例:

代码语言:javascript
复制
<?php

$num = "47 downvotes";
echo $num . PHP_EOL;
echo ++$num;

递增字符串的结果并不是您期望的结果:

代码语言:javascript
复制
47 downvotes
47 downvotet

所以你最初的假设是PHP不工作,而实际上它工作了。

代码语言:javascript
复制
$num = "47 downvotes";
echo (int) ++$num . PHP_EOL;

$num2 = "47";
echo (int) ++$num2;

输出:

代码语言:javascript
复制
47
48

类型转换的过程本质上是复杂的,有各种各样的行为可以产生意想不到的结果,只是不是所有可靠的“修复您的输入”可以让您在一行代码中找到任何字符串的数字部分,但这并不意味着PHP是有缺陷的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50918576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档