- is_numeric: documentation ( source)
- round: documentation ( source)
- in_array: documentation ( source)
<?php
class Product
{
protected $price;
protected $discount;
public function getPrice() {
return $this->price->getValue();
}
public function setPrice($price, $type) {
$this->price = new Price($price);
$this->price->setType($type);
}
public function getDiscount() {
return $this->discount->getValue();
}
public function setDiscount($discount, $type) {
$this->discount = new Discount($discount);
$this->discount->setType($type);
}
}
class Price
{
protected $type; // 0 - one-off price, 1 - monthly price, 2 - combination of previous two;
protected $value;
function __construct($value) {
if (is_numeric($value)) {
$this->value = round(floatval($value), 2);
} else {
$this->value = 0;
}
}
public function getType() {
return $this->type;
}
public function setType($type) {
if (is_numeric($type) && in_array(intval($type), array(0, 1, 2))) {
$this->type = intval($type);
} else {
$this->type = 0;
}
}
public function getValue() {
return $this->value;
}
}
class Discount extends Price{}
class Shopcart
{
protected $shopping_list;
function __construct($products) {
$this->shopping_list[] = $products;
}
public function getTotalPrice() {
$cost = 0;
foreach ($this->shopping_list as $item) {
$cost += $item->getCost();
}
return $cost;
}
}