PHP为什么显式类型转换+ 1有效,但没有增量运算符

时间:2018-06-18 23:06:14

标签: php casting

首先,让我们说为了论证,我想要这样做的原因是任意的,而不是特定于解决方案。

我想显式地转换一个变量,无论输入如何,并在类型转换后增加它,和原始变量。例如,不是这样的:

$num = "47 downvotes";
(int) ++$num;

我正在寻找类似于这个伪代码版本或其变体的东西:

$num = "value";
++((int) $num);

对于PHP松散,我真的希望这可以工作,但我不能先使用Pre-increment运算符而不先创建另一个变量。

$num = "value";
$cast = (int) $num;
echo ++$cast;

在测试时,我发现PHP 足够松散,但是通过添加数字来实现它的工作原理:

$num = "47 dogs";
echo ((int) $num) + 1;

我也理解我的第一个例子,没有错,但是再次,出于任意原因,我需要确保它在递增/递减之前已被转换。

所以问题是,为什么PHP足够松散以便后者编译?

如果你能提供任何有信誉的阅读材料的资源或链接,我也会很感激。

1 个答案:

答案 0 :(得分:0)

使用显式类型转换,您必须将结果分配给变量。在您的示例中,您试图在变量为字符串时增加变量,这些变量失败或不会产生您期望与类型转换相结合的结果。

看看你原来的例子:

<?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存在缺陷。