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();
}