我正在学习PHP5中面向对象编程的新手。我对没有OOP的PHP有很好的了解。所以我在这里需要一点帮助,以便使用OOP PHP创建新文件并将我的数据存储到文件中。当我运行这个程序时,它说543集写入CSV并且它正确,因为它来自我的readerfile,我不会在这里提及,因为它是大文件并且正常运行。所以我只需要存储和检查我的数据到文件中。 这是我的代码:
<?php
namespace autodo\interfaces\writer;
/**
* Writes CSV Data to File
*/
class CSVFileWriter
{
public $filename="data.txt";
private $filehandle;
private $counter = 0;
public function init() {
// open/create file
// maybe create tmp-File
$file = fopen( $this->filename, "w" );
}
public function process($data) {
$tmp = $data->getCSV();
/*
@todo open file, write data
*/
fwrite( $this->file, "Data\n" );
$this->counter++;
}
public function finish() {
// close file
echo "\n".$this->counter." sets written to CSV\n";
}
}
答案 0 :(得分:1)
您不能以这种方式使用$this->file
。在init函数中,您直接使用$file
,它只在init()函数的范围内设置。
所以要么你使用你的$ filehandle变量(可能是最好的解决方案,因为这个变量似乎存在的原因),或者你在代码中的任何地方使用$ this-&gt;文件。
<?php
namespace autodo\interfaces\writer;
/**
* Writes CSV Data to File
*/
class CSVFileWriter
{
public $filename="data.txt";
private $filehandle;
private $counter = 0;
public function init() {
$this->filehandle = fopen( $this->filename, "w" );
}
public function process($data) {
$tmp = $data->getCSV();
fwrite( $this->filehandle, "$tmp\n" );
$this->counter++;
}
public function finish() {
fclose ($this->filehandle);
echo "\n".$this->counter." sets written to CSV\n";
}
}
答案 1 :(得分:0)
您正在将resource
从fopen
保存到init方法中的本地变量中:
$file = fopen( $this->filename, "w" );
所以稍后当你试图从你的实例中获取它时它不可用:
fwrite( $this->file, "Data\n" );
更改init
方法中的行以将resource
存储在您的实例属性中:
$this->file = fopen( $this->filename, "w" );
然后,您还应将$file
声明为类属性。