Php用OOP做一个for循环,可以';我不知道怎么做

Php用OOP做一个for循环,可以';我不知道怎么做,php,for-loop,Php,For Loop,我有以下代码: <?php class Product { public $name; public $desc; public $price; public $category; public $qty; public $model; public $manufacturer; function display() { $

我有以下代码:

   <?php
    class Product {
        public $name;
        public $desc;
        public $price;
        public $category;
        public $qty;
        public $model;
        public $manufacturer;

        function display() {
            $output = '';

            $output .= $this->name ."</br>";
            $output .= $this->desc . "</br>";
            $output .= $this->price "</br>";
            $output .= $this->category "</br>";
            $output .= $this->qty "</br>";
            $output .= $this->model "</br>";
            $output .= $this->manufacturer "</br>";


            return $output;
        }
    }


    $product = new Product();
    $product->name = "Samsung galaxy s6";
    $product->desc = "It's kind of good but meh";
    $product->price = "1000 GBP";
    $product->category = "Phones";
    $product->qty = "Quantity:999";
    $product->model = "Samsung s6";
    $product->manufacturer = "Phone guys";

    echo $product->display();

    ?>
因此,当我设置所有值时,一切都正常,但我的问题是:我是否可以将其中的每一个都设置为一个数组,比如说,我想在浏览器中显示两个产品

当我将$product->name设置为$product->name=array(“Samsubg”、“Iphone”、“Apple”)

这本身只显示**苹果*,我在这里有点迷失了该做什么


谢谢。

您通常会使用setter方法来设置变量,如果您想将其设置为数组,它将如下所示

private name = array();

public function setName($name) {
    $this->name[] = $name;
}
您可能希望对所有变量执行此操作。如果要传入一个数组,可以循环遍历该数组,然后一次传入一个数组,或者传入整个数组,您需要将setter函数设置为:

private name = array();

public function setName($name) {
    $this->name = $name;
}
然后可以通过调用方法并传入数组来设置它

$product->setName($myArrayOfNames);

在类中定义数组属性,下面是一个完整的工作示例

 class Body
{
   private $name = array();
  public function setName($name)
  {
    $this->name = $name;
  }
  public function getName()
  {
    return $this->name;
  }
}
$user = new Body();
$user->setName(array("Samsubg","Iphone","Apple"));

echo var_dump($user->getName())
这将转储一个数组,您所要做的就是对它执行
循环,或者通过索引获取数组值:
$user->getName[0]

在OOP中,使用一个包含数组字段的对象是没有意义的。这只是对象中的过程编程

相反,每个对象的字段应该只描述对象本身的状态。若您需要一个数组来描述多个产品,那个么您只需创建一个
Product
对象的数组

$products = array();

$product_one = new Product();
$product_one->name = "Samsung galaxy s6";
$product_one->desc = "It's kind of good but meh";
$product_one->price = "1000 GBP";
$product_one->category = "Phones";
$product_one->qty = "Quantity:999";
$product_one->model = "Samsung s6";
$product_one->manufacturer = "Phone guys";

$product_two = new Product();
$product_two->name = "iPhone6";
$product_two->desc = "who knows";
$product_two->price = "10000 GBP";
$product_two->category = "Phones";
$product_two->qty = "Quantity: 1";
$product_two->model = "iPhone";
$product_two->manufacturer = "Apple";

$products[] = $product_one;
$products[] = $product_two;

foreach($products as $product) {
    echo $product->display();
}

也许你可以创建一个对象数组?然后,您可以迭代该数组并为每个对象调用函数。不过,您可能需要对代码进行一些更改;不要试图在应该存储标量的地方创建对象存储数组。@Maximus2012还有其他方法可以做到这一点,因为我必须添加100种不同的产品?我认为您应该考虑创建类的构造函数,并在创建该类的对象时启动每个产品的值。然后,您可以将该逻辑与对象数组方法相结合。这应该会使事情简化一点。是的,这是可行的,但我的想法是添加100种不同的产品,然后让它们在浏览器中显示所有产品。使用这种方法,您仍然可以这样做,但您还需要键入每个产品的信息。这个答案也可以使用我在评论中提到的构造函数方法进一步简化。这完全取决于他如何定义产品。它来自数据库吗?它是从文件中解析出来的吗?名称、描述、价格等的数组?没有更多信息,只有两个选项是很长的文件或很长的构造函数。@Zsw请查看我添加到原始问题中的注释。如果没有数据库,我认为唯一的选择是键入所有内容,就像您的答案一样。
$products = array();

$product_one = new Product();
$product_one->name = "Samsung galaxy s6";
$product_one->desc = "It's kind of good but meh";
$product_one->price = "1000 GBP";
$product_one->category = "Phones";
$product_one->qty = "Quantity:999";
$product_one->model = "Samsung s6";
$product_one->manufacturer = "Phone guys";

$product_two = new Product();
$product_two->name = "iPhone6";
$product_two->desc = "who knows";
$product_two->price = "10000 GBP";
$product_two->category = "Phones";
$product_two->qty = "Quantity: 1";
$product_two->model = "iPhone";
$product_two->manufacturer = "Apple";

$products[] = $product_one;
$products[] = $product_two;

foreach($products as $product) {
    echo $product->display();
}