coffeemonitor
coffeemonitor

Reputation: 13120

PHP - Update public variable

Here's what I'm doing:

<?php
$csvObj = new Csv2Parser($file);
$csvObj->loopContents();
$csvObj->looplimitrows = 9; // why does this get ignored?
?>

This looplimitrows is always returning 5 rows, instead of the 9 I am wanting. Am I not doing it right?

Here's the Class:

class Csv2Parser
{
    private $filepath; 

    public $looplimitrows = 5; 

    /*
      .... __construct() goes here...
    */

    public function loopContents(){
      $looplimitrows = $this->looplimitrows;
      $linecount=0;
      $fp = fopen($targetFile, "r"); // open the file
      while ($line = fgetcsv($fp)) {
      $linecount++;

        if(!empty($looplimitrows) && $linecount > $looplimitrows){ break; }

        echo $line[0]; // first column only

      }//eof while()

}

Upvotes: 1

Views: 90

Answers (2)

Insyte
Insyte

Reputation: 2236

It get's ignored as it's not set before you loop through the csv therefor the limit is 5 as that's it's default value.

public $looplimitrows = 5;

You need to set Csv2Parser::looplimirows as below.

$csvObj = new Csv2Parser($file);
$csvObj->looplimitrows = 9; // It needs to go here.
$csvObj->loopContents();

Alternatively, try this :)

<?php
ini_set('auto_detect_line_endings', true);

class Csv2Parser {

    private $rowLimit = NULL;

    private $fileHandle = NULL;
    private $data = NULL;

    public function __construct($filename) 
    {

        if (!file_exists($filename))
            throw new Exception("Can't find file:" . $filename);

        $this->fileHandle = fopen($filename, "r");
    }


    public function get($n) 
    {
        $this->rowLimit = (int) $n;

        return $this;
    }


    public function rows()
    {
        $linecount = 0;

        while (($line = fgetcsv($this->fileHandle, 1000, ",")) !== false) {
            $linecount++;

            if(!is_null($this->rowLimit) && $linecount > $this->rowLimit)
                break;


            $this->data[] = $line;

        }

        return $this->data;
    }
}


$csv = new Csv2Parser("my.csv");
print_r($csv->get(9)->rows()); // Could not be more self explanitory

Upvotes: 3

bring2dip
bring2dip

Reputation: 885

You are calling the loopContents() method without first setting the public variable looplimitrows. So the method executes with the default value of looplimitrows. First set the looplimitrows public variable and call the loopContents() method.

Upvotes: 0

Related Questions