【发布时间】:2020-03-03 07:45:09
【问题描述】:
我不明白如何将 ProcessInvoice 类中实例化的 InvoiceItem 对象传递回我的数组以输出到页面。
查看帖子底部的输出。它应该输出数组中的所有 3 个项目和总发票总额。
我是否使用了$this 关键字错误??如何将对象传回Invoice 类中的invoiceItems 数组?
class InvoiceItem {
private $id;
private $itemQuanity;
private $itemPrice;
private $itemDescrip;
// Getters and Setter here for above 4 attributes
public function calculateItemTotal() {
$total = $this->itemPrice * $this->itemQuanity;
return $total;
}
public function display() {
echo "Item ID: $this->id // Item Quanity: $this->itemQuanity // Item Price: $this->itemPrice // Item Description: $this->itemDescrip // Total: $$this->total<br>";
}
}
class Invoice {
private $invoiceItems;
public function __construct() {
$item = new InvoiceItem();
$this->invoiceItems = array($item);
}
public function getInvoiceItems()
{
return $this->invoiceItems;
}
public function setInvoiceItems($invoiceItems)
{
$this->invoiceItems = $invoiceItems;
return $this;
}
public function calculateInvoice() {
foreach ($this->invoiceItems as $item_y) {
$invoiceTotal = $invoiceTotal += $item_y->calculateItemTotal();
}
echo "Invoice Total: $$invoiceTotal ";
}
public function displayInvoice() {
foreach ($this->invoiceItems as $item_x) {
$item_x->display();
}
return $this->calculateInvoice();
}
}
class ProcessInvoice {
private $invoice;
public function __construct() {
$this->invoice = new Invoice();
}
public function getInvoice()
{
return $this->invoice;
}
public function setInvoice($invoice)
{
$this->invoice = $invoice;
return $this;
}
function createInvoiceItems() {
$item1 = new InvoiceItem();
$item1->setId(1);
$item1->setItemPrice(1.66);
$item1->setItemQuanity(2);
$item1->setItemDescrip("item example");
$item2 = new InvoiceItem();
$item2->setId(2);
$item2->setItemPrice(34.99);
$item2->setItemQuanity(1);
$item2->setItemDescrip("bla bla");
$item3 = new InvoiceItem();
$item3->setId(3);
$item3->setItemPrice(2.24);
$item3->setItemQuanity(1);
$item3->setItemDescrip("Another item");
// SOMETHING WRONG HERE?!
$this->invoice->setInvoiceItems($item1, $item2, $item3);
}
function runProcess() {
$invoice_x = new Invoice();
$this->createInvoiceItems();
$invoice_x->displayInvoice();
}
}
输出:(来自本文中没有的“试驾”类 - 只需调用 ProcessInvoice 类中的 runProcess() 方法)
Item ID: // Item Quanity: // Item Price: // Item Description: // Total: $
Invoice Total: $0
【问题讨论】: