Untitled

 avatar
user_5151433
plain_text
3 years ago
4.1 kB
9
Indexable
<?php

class Product
{
    protected string $name;
    protected int $price;
    protected array $options;

    public function __construct(string $name, int $price, array $options)
    {
        $this->setName($name);
        $this->setPrice($price);
        $this->setOptions($options);
    }

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

    public function getPrice(){
        return $this->price;
    }

    public function getOptions(){
        return $this->options;
    }

    public function setName($name){
        $this->name = $name;
    }

    public function setPrice($price){
        $this->price = $price;
    }

    public function setOptions($options){
        $this->options = $options;
    }
}

class Shirt extends Product
{
    private string $size;
    private $allowSize = ['sm' , 'md' , 'lg' , 'xlg' , '2xlg'];

    public function __construct(string $name, int $price, array $options , string $size)
    {
        parent::__construct($name, $price, $options);

        $this->setSize($size);

    }

    public function setSize($size){
        if (in_array($size , $this->allowSize)){
            $this->size = $size;
        }
    }

    public function getSize(){
        return $this->size;
    }

}

class Pants extends Product
{
    private int $size;

    public function __construct(string $name, int $price, array $options , int $size)
    {
        parent::__construct($name, $price, $options);
        $this->setSize($size);
    }

    public function setSize($size){
        if ($size > 30 && $size < 60 && $size % 2 == 0){
            $this->size = $size;
        }
    }

    public function getSize(){
        return $this->size;
    }
}

class Shop
{
    private array $repo = [];
    private int $income = 0;

    public function addProduct(Product $product, int $count): bool
    {
        $lastRepoItem = end($this->repo);
        if ($count >= 0){
            $this->repo[] = [
                'id' => empty($lastRepoItem) ? 1 : $lastRepoItem['id'] + 1 ,
                'product' => $product,
                'count' => $count
            ];
            return true;
        } else {
            return false;
        }

    }

    public function getSuggestion(string $type, mixed $size, int $maxPrice, array $options = []): array
    {
        $iMax = count($options);
        $items = [];
        foreach ($this->repo as $item) {
            if (get_class($item['product']) !== $type) {
                continue;
            }
            if ($item['product']->getSize() !== $size) {
                continue;
            }
            if ($item['product']->getPrice() >= $maxPrice) {
                continue;
            }
//            for ($i=0,  $i < $iMax; $i++;) {
//                if ($item->options[$i] !== $options[$i]) {
//
//                }
//            }

            $items[] = $item;
        }

        return $items;
    }

    public function sell(int $id): Product
    {
        $product = [];
        foreach ($this->repo as $key => $item) {
            if ($item['id'] === $id) {
                if ($item['count'] !== 0) {
                    $product = $item['product'];
                    $this->income += $product->getPrice();
                    $this->repo[$key]['count']--;
                } else {
                    return 'mojood nist';
                }
            }
        }

        return $product;
    }
}

$pants = new Pants('zirshalvar', '200', [
    'color' => 'red',
    'model' => 'dampa kesh'
], 38);

$pants2 = new Pants('zirshalvar', '500', [
    'color' => 'red',
    'model' => 'dampa kesh'
], 38);

$shirt = new Shirt('pirahan', '200', [
    'color' => 'meshki',
    'model' => ''
], 'sm');

$shop = new Shop();
$shop->addProduct($pants, 5);
$shop->addProduct($pants2, 10);
$shop->addProduct($shirt, 2);


echo '<pre>';
print_r($shop->sell(2));
print_r($shop);
echo '</pre>';

Editor is loading...