PHP基础 - 类型转型的困境

时间:2010-11-18 16:20:14

标签: php

在下面的代码中,$counter变量是类型转换,用于按照此行$counter=(int)fread($fp, 20);存储整数,然后使用strlen($counter)。我的意思是,strlen返回一个字符串的长度,但$counter现在已经是一个整数变量。 substr($ counter,$ i,1)也是如此。该程序给出了所需的结果,只是我理解如上所述。



$counter_file = "./count.txt";
$img_dir="./img";
if(!($fp=fopen($counter_file, "r"))) die ("Could not find $counter_file");
$counter=(int)fread($fp, 20);
fclose($fp);

$counter++;

for ($i=0; $i<strlen($counter); $i++){

 $img_src = $img_dir."/".substr($counter, $i,1).".jpg";
 $img_tag_str .="<img src= \"$img_src\" border=\"0\">";

 }
echo "You are visitor no. $img_tag_str.";

$fp=fopen($counter_file, "w");
fwrite($fp, $counter);
fclose($fp);

Regrds, 安瑟尼。

3 个答案:

答案 0 :(得分:2)

如果将整数传递给strlen方法,则将此整数强制转换为字符串。

所以strlen(23)会给2; strlen(1234)4

为什么你需要这个?例如,要知道数字中的位数。即使它可能不是最佳方式。

这就是示例代码中发生的情况。 $counter变量从文件加载。强制转换为整数确保这是一个实数,而不是一些随机的东西¹。然后,循环用于遍历每个数字,并显示具有该数字的图像。这就解释了为什么我们需要strlensubstr整数。


¹为什么随机的东西在这里不好?想象一下,当你期望一个数字时,文件中的数据是“Abc”。循环将输出如下内容:

<img src="img/A.jpg" alt="" />
<img src="img/b.jpg" alt="" />
<img src="img/c.jpg" alt="" />

由于您没有A.jpgb.jpgc.jpg,因此不会显示任何内容。

答案 1 :(得分:1)

即使$ counter是一个整数,某些需要字符串的函数也可以将其视为一个整数。如果$ counter = 125,则strlen($ counter)会看到strlen('125')并给出正确的3结果。

该函数将传递给的值转换为字符串,但原始文件不会更改。

答案 2 :(得分:1)

$ counter被强制转换为int,因此$ counter ++将执行一个简单的整数增量。像strlen($ counter)这样的函数在返回长度

之前隐式地将$ counter值强制转换为字符串