PHP中的readline与fread/fgets有何不同?

5

在我的控制台命令中,我一直使用readline,但今天我遇到了freadfgets函数,我的问题是:使用这两种方法有什么区别:

// first
$inputLine = readline();

// second
$inputLine = fgets(STDIN);

他们两个的功能基本一样,不是吗?

哎呀,我对 PHP 中的 readline() 函数真的不熟悉……我只用过 fgets() ;) 你可以编写一个基准测试,看看它们是否真的有很大的区别。否则,可能只是取决于你喜欢哪个。 - IncredibleHat
1
文件指针非常重要,但我现在并不是很熟悉它们,更多信息请参阅:http://php.net/manual/en/function.fgets.php http://php.net/manual/en/function.readline.php - Honsa Stunna
4个回答

1

readline()默认从STDIN读取输入,而fgets()可以从任何资源中读取。此外,readline()的执行时间比fgets()长。


0

fgets比readline要快得多。我不太清楚为什么,但我可以给你一些基准测试。

我经常参与codeforces.com上的问题解决。在其中一个问题上,我在使用PHP解决时遇到了时间限制问题,我当时正在使用readline,解决方案的时间超过了2秒。当我用fgets替换readline时,解决时间只有400毫秒。

所以fgets非常快。


0

来自readline文档

readline函数实现了与GNU Readline库的接口。这些函数提供可编辑的命令行。例如,Bash允许您使用箭头键插入字符或滚动命令历史记录。

readline接受一个参数,即$prompt字符串,并为您修剪换行符。此外,扩展函数具有类似于bash的命令历史记录,可以让您使用箭头键滚动以前的条目,完成等功能。正如其他人在之前的答案中指出的那样,附加功能确实会增加一些开销,因此可能会更慢。

fgets比较基本,只是从文件指针获取输入。


-1

我能想到的唯一可能的区别就是readline()不带参数,只能默认从STDIN读取输入,而fgets()可以从任何resource读取。因此,换句话说,readline()fgets的同义词,具有第一个预定义参数,例如fprintf()printf()

考虑以下内容:

fprintf(STDOUT, "hello!");
printf("hello!);

这在 PHP 标准库中非常常见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接