我们说我有文件foo.txt,其中我有一个数字是0。
然后我读取该文件,并将0存储到数组中。我想将数字增加1,所以我只使用速记运算符++
,但它不起作用+=
。
$poo = file("foo.txt");
$poo[0]++;
echo $poo; // gives me 0
$poo[0] += 1;
echo $poo; // gives me 1
我知道,当我读取poo[0]
的文件值为空格"0 "
的字符串,但为什么它不能与++
一起使用?
答案 0 :(得分:2)
您在使用隐式类型转换的语言中遇到了常见错误。当您将foo.txt的内容读入$ poo时,该值将存储为字符串。
当你告诉PHP使用++
增加字符串时,PHP必须尝试确定你的意思。 $poo
包含一个字符串(不是数字),因此PHP不知道您要添加0 + 1的值;相反,它认为您正在尝试执行字符串操作并提供意外结果。
在第二种情况下,隐式输入表明,由于您在等式的右侧使用整数(不是字符串),因此您必须将左侧转换为整数。
为安全起见,您应该明确告诉PHP解释器您正在尝试对两个数字执行数学运算:
$poo[0] = (int)$poo[0] + 1;
有关详细信息,请参阅PHP: Type Juggling。