PHP对象和foreach循环存在问题,对象未正确存储值

PHP对象和foreach循环存在问题,对象未正确存储值,php,Php,我试图从名为input.csv的文件中获取值,并将其添加到名为$myItem的对象中。正如您所看到的,我正在使用foreach方法来实现这一点。由于某种我不清楚的原因,对象的值被混淆了 当我最初使用setter方法设置$item_number的值时,该值是正确的值-input.csv第一行中的第一个条目。但是,当foreach循环完成时,该值已更改为input.csv第一行中的最后一个条目 对于对象$myItem中的所有实例变量都是如此,它们都将更改为input.csv第一行中的最后一个条目。我

我试图从名为input.csv的文件中获取值,并将其添加到名为$myItem的对象中。正如您所看到的,我正在使用foreach方法来实现这一点。由于某种我不清楚的原因,对象的值被混淆了

当我最初使用setter方法设置$item_number的值时,该值是正确的值-input.csv第一行中的第一个条目。但是,当foreach循环完成时,该值已更改为input.csv第一行中的最后一个条目

对于对象$myItem中的所有实例变量都是如此,它们都将更改为input.csv第一行中的最后一个条目。我不知道为什么

这是我的密码:

<?php
  class Item
  {
    private $item_number;
    private $name;
    private $type;
    private $make;
    private $model;
    private $brand;
    private $description;

    // Item Number
    function SetItemNumber($value)
    {
      $this->item_number = $value;
    }

    function GetItemNumber()
    {
      return $this->item_number;
    }

    // Name
    function SetName($value)
    {
      $this->item_number = $value;
    }

    function GetName()
    {
      return $this->name;
    }

    // Type
    function SetType($value)
    {
      $this->item_number = $value;
    }

    function GetType()
    {
      return $this->type;
    }

    // Make
    function SetMake($value)
    {
      $this->item_number = $value;
    }

    function GetMake()
    {
      return $this->make;
    }

    // Model
    function SetModel($value)
    {
      $this->item_number = $value;
    }

    function GetModel()
    {
      return $this->model;
    }

    // Brand
    function SetDescription($value)
    {
      $this->item_number = $value;
    }

    function GetDescription()
    {
      return $this->description;
    }

    // Brand
    function SetBrand($value)
    {
      $this->item_number = $value;
    }

    function GetBrand()
    {
      return $this->brand;
    }
  }

  $file = fopen("input.csv", "r");

  $myItem = new Item;

  foreach (fgetcsv($file) as $key => $value) {

    switch ($key) {
      case 0:
        $myItem->SetItemNumber($value);
        echo $myItem->GetItemNumber(); // prints first value in first row of input.csv
        break;
      case 1:
        $myItem->SetName($value);
        break;
      case 2:
        $myItem->SetType($value);
        break;
      case 3:
        $myItem->setMake($value);
        break;
      case 4:
        $myItem->setModel($value);
        break;
      case 5:
        $myItem->setBrand($value);
        break;
      case 6:
        $myItem->setDescription($value);
        break;
    }
  }

  echo $myItem->GetItemNumber(); // ??? prints last value of first row of input.csv.
  // This is the value that you should only get from getDescription().

  fclose($file);
  ?>


提前感谢您的帮助

看看你的setter方法,它们都在做:

 $this->item_number = $value;

看看您的setter方法,它们都在做:

 $this->item_number = $value;

您只读取文件的第一行。
foreach
循环只在该行中的字段上循环,而不是在所有行上循环。@Barmar我知道这一点,现在我只尝试存储第一行的值。我看不出这段代码中会发生任何情况。你只调用了一次
fgetcsv()
。哦,我误解了这个问题。我以为你说你是从最后一行得到值的。你只是在读取文件的第一行。
foreach
循环只是在行中的字段上循环,而不是在所有行上循环。@Barmar我知道这一点,现在我只想存储第一行的值,我看不出在这段代码中会发生什么。你只调用了一次
fgetcsv()
。哦,我误解了这个问题。我以为你说你从最后一行得到了价值。