fgetcsv()如何在引擎盖下工作?

时间:2014-01-27 08:57:01

标签: php

我开发了一些读取csv文件的php代码(通过fgetcsv()),验证文件中的(自定义)标头,处理以下数据有效负载并将结果保存到数据库中。代码工作正常,但由于我没有将代码分解为函数(所有提到的操作都在典型的while循环中,如在www.php.net/fgetcsv的已知第一个示例中),因此变得非常大。

所以我想通过分解函数重新组织我的代码,事实上,用方法定义一个类,我想知道我是否还需要while循环来访问整个文件,或者我是否可以使用fgetcsv()使用各种方法,如下例所示?:例如在各种方法之后调用fgetcsv()。我不确定fgetcsv()在读取一行时是否更改了文件处理程序(指针)的值,因为我在手册www.php.net/fgetcsv或者本网站上找不到这个。

简化代码示例:

class Mycsvfile {

   $filehandle;

   function __construct($filename){} //opens the $file with a name; sets $filehandle

   function isValidHeader(){} //checks customised header; calls fgetcsv() 

   function processPayload(){} //processes the data payload after the header; calls fgetcsv() and database storage functions

   function close(){} //closes the csv file

}

$myfile = new Mycsvfile('aname');

if($myfile->isValidHeader){
  $myfile->processPayload();
}
$myfile->close();

1 个答案:

答案 0 :(得分:0)

如果所有其他方法都失败了,您可以随时查看PHP源代码。我不是这方面的专家,但看起来fgetcsv()函数的工作方式在第77行的文件/ext/spl/internal/splfileobject.inc中描述。这是GitHub存储库的链接:

https://github.com/php/php-src/blob/master/ext/spl/internal/splfileobject.inc#L77