使用OOP php创建数据并将其写入文件

时间:2014-08-08 09:46:28

标签: php file

我正在学习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";
    }
}

2 个答案:

答案 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)

您正在将resourcefopen保存到init方法中的本地变量中:

$file = fopen( $this->filename, "w" );

所以稍后当你试图从你的实例中获取它时它不可用:

fwrite( $this->file, "Data\n" );

更改init方法中的行以将resource存储在您的实例属性中:

$this->file = fopen( $this->filename, "w" );

然后,您还应将$file声明为类属性。