我想显式地转换一个变量,而不考虑输入,并在类型转换之后递增它,而不是使用原始变量。例如,不是这样的:
$num = "47 downvotes";
(int) ++$num;
我正在寻找类似于这个psuedo编码版本的东西,或者它的变体:
$num = "value";
++((int) $num);
对于松散的PHP,我真的希望这能起作用,但如果不先创建另一个变量,我就不能使用前增量运算符。
$num = "value";
$cast = (int) $num;
echo ++$cast;
在测试过程中,我发现PHP足够松散,只需添加一个数字即可工作:
$num = "47 dogs";
echo ((int) $num) + 1;
我也理解我的第一个例子是正确的,但同样,出于任意原因,我需要确保它在递增/递减之前被强制转换。
所以问题是,为什么PHP足够宽松,可以让后者进行编译?
发布于 2018-06-19 07:34:36
使用显式类型转换时,必须将结果赋给一个变量。在您的示例中,当变量是字符串时,您将尝试递增变量,这将失败,或者不会在与类型转换结合使用时产生预期的结果。
请看您的原始示例:
<?php
$num = "47 downvotes";
echo $num . PHP_EOL;
echo ++$num;
递增字符串的结果并不是您期望的结果:
47 downvotes
47 downvotet
所以你最初的假设是PHP不工作,而实际上它工作了。
$num = "47 downvotes";
echo (int) ++$num . PHP_EOL;
$num2 = "47";
echo (int) ++$num2;
输出:
47
48
类型转换的过程本质上是复杂的,有各种各样的行为可以产生意想不到的结果,只是不是所有可靠的“修复您的输入”可以让您在一行代码中找到任何字符串的数字部分,但这并不意味着PHP是有缺陷的。
https://stackoverflow.com/questions/50918576
复制相似问题