PHP OOP使用构造函数读取csv文件

时间:2017-01-27 08:55:47

标签: php csv oop

我希望使用PHP OOP中的构造函数回显整个CSV文件。 有人知道如何做到这一点?我把它放在代码片段中,因为代码函数不起作用。

此处为CSV文件:http://www.filedropper.com/cars_1

 <?php

class Csv {

    private $file; 

    public function __construct($filename, $mode) {
        $this->file = fopen($filename, $mode); 
        return $this->file;
    }

    public function endFile() {
        return feof($this->file); 
    }

    public function getCSV($mode) {
        return fgetcsv($this->file, $mode);
    } 
    
    public function setFile(){
    include 'test.csv';
    }

    public function close() {
        fclose($this->file); 
    }
}

include_once ('csv.php');

$f = fopen("test.csv", "r");
echo "<html><body><table>\n\n";
while (($line = fgetcsv($f)) !== false) {
        echo "<tr>";
        foreach ($line as $cell) {
                echo "<td>" . htmlspecialchars($cell) . "</td>";
        }
        echo "</tr>\n";
}
fclose($f);
echo "\n</table></body></html>";

?>

1 个答案:

答案 0 :(得分:1)

首先,constructor的目的是配置对象,而不是执行操作。你的文件打开动作是一个很大的禁忌。

其次,PHP构造函数不能有return语句。可以说构造函数返回对象本身。

第三,要运行类代码,必须使用

实例化对象
new Csv($filename, $mode);

也许这就是你的目标:

class CsvReader {

    private $file; 

    public function __construct($filename) {
        $this->file = $filename;
    }

    // Returns and bi-dimensional array iterable with foreach
    public function getCsv() {

        $csv = [];

        if (($handle = fopen("test.csv", "r")) !== FALSE) {
            while (($data = fgetcsv($handle)) !== FALSE) {
                $csv[] = $data;
            }
            fclose($handle);
        }


        return $csv;
    } 

}

$reader = new CsvReader('test.csv');
var_dump($reader->getCsv());