php对象

时间:2017-07-14 11:54:02

标签: php

这是我的班级,它读取csv并以某种方式存储信息

<?php
    class CSV{
        private $data;

        function __construct($filename){
            $this->data = $this->getDataFromFile($filename);
        }

        public function __get($property){

            if(property_exists($this,$property)){
                return $this->$property;
            }
        }



        private function getDataFromFile($filename){
            $new_data = array();
            $result = array();
            if (($handle = fopen($filename,"r")) !== FALSE) {
                while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
                    array_push($result, explode(";", $data[0]));;
                }
                fclose($handle);
            }


            $header = $result[0];

            $in_columns = array();
            for ($j = 0 ; $j < count($result[0]); $j++){
                $new = array();
                for ($i = 1 ; $i < count($result); $i++){
                    array_push($new, $result[$i][$j]);
                }
                array_push($in_columns, $new);
            }

            $idx = 0;
            foreach ($header as $title) {
                $new_data[$title] = $in_columns[$idx];
                $idx++; 
            }
            //var_dump($new_data);//the content of $new_data its correct
            $this->data = $new_data;
        }
    }

?>

但是我尝试使用班级

$csv = new CSV('./csv/file.csv');
var_dump($csv->__get('data'));

最后一个var_dump显示一个NULL值¿值的赋值有什么问题?看起来对我来说是正确的,哪里有问题?

2 个答案:

答案 0 :(得分:0)

问题是您的CSV文件以空行结尾(最后一行后为\n)。

因此,你正在处理一个空数组,将一个整数变量(null)推入数据数组。

答案 1 :(得分:-1)

您在构造函数中调用$this->getDataFromFile($filename)并将其值分配给$this->data。  但是...... getDataFromFile()的实施实际上并未返回任何值,因此它会将NULL分配给此属性。

您需要将getDataFromFile()更改为返回值  摆脱构造函数中的变量赋值 -  $this->data已在您的方法中设置。

关于__get() -  它是magic method。它检查指定的属性是否存在,如果存在 - 返回它的值。你不会这样称呼它。使用以下代码(在公开$this->data之后):

var_dump($csv->data);

OR 为此属性准备访问者,该访问者将返回此值。