0

我对 PHP 相当陌生,只是想转换我在 C 中所做的事情。从 C 中读取文件的习语是:

while ((c = getchar()) != EOF) {
    doSomethingWith(c);
}

我已经阅读了一些内容,似乎在 PHP 中执行此操作的“正确”方法是:

while (!feof($file)) {
    $c = fgetc($file);
    doSomethingWith($c);
}

我的问题是:可以将两者组合如下(我已经尝试过,并且它在我的测试文件上工作正常),还是在 EOF 之前可以找到 null 的情况?:

while (($c = fgets($f)) != null) {
    doSomethingWith($c);
}

提前喝彩

史蒂夫

4

2 回答 2

2

没关系,但是您这样做的方式是错误的(至少“根本不正确”)。fgets()如果到达文件末尾,则返回false,因此您应该进行测试false。它对您有用,因为您使用“简单”相等运算符 ( ) ,当与布尔值比较时==,它将大小写null为。false

返回从句柄指向的文件中读取的最大长度为 1 个字节的字符串。如果文件指针中没有更多数据要读取,则返回 FALSE。

如果发生错误,则返回 FALSE。

这意味着,它必须看起来像

while (($c = fgets($f)) !== false) {
    doSomethingWith($c);
}
于 2011-06-23T10:23:52.513 回答
0

fgets记录在false没有更多数据要读取时返回。因此,技术上正确的解决方案是

// Notice the !== [non-identical] operator below
while (($c = fgets($f)) !== false) {
    doSomethingWith($c);
}

这更好,因为fgets可以合法地返回一个空(零长度)字符串,该字符串与null使用相等运算符时比较相等。该运算符!==还检查其操作数的类型,因此您可以使用这种方式。

于 2011-06-23T10:24:41.207 回答