diff --git a/php/description.txt b/php/description.txt new file mode 100644 index 00000000..8a7efc57 --- /dev/null +++ b/php/description.txt @@ -0,0 +1,5 @@ + на мой взгляд задача описана не полностью и на реальном проекте я бы такую задачу не брал в работу. +по-моему мнению ее следовало бы дополнительно обсудить с бизнес аналитиком. +как минимум вопросы + - поэтому у него нет срока хранения - что значит нет срока? ноль? если уже какой-то был указан обнулить или просто не учитывать? + - качество увеличивается пропорционально возрасту - тут по идее нужен какой-то коэффицинт пропорционалности \ No newline at end of file diff --git a/php/src/GildedRose.php b/php/src/GildedRose.php index db81ee3b..fac7a4a3 100644 --- a/php/src/GildedRose.php +++ b/php/src/GildedRose.php @@ -4,6 +4,12 @@ declare(strict_types=1); namespace GildedRose; +use GildedRose\Handlers\AgedBrieItemHandler; +use GildedRose\Handlers\BackStageItemHandler; +use GildedRose\Handlers\ConjuredItemHandler; +use GildedRose\Handlers\DefaultItemHandler; +use GildedRose\Handlers\SulfarusItemHandler; + final class GildedRose { /** @@ -14,7 +20,7 @@ final class GildedRose ) { } - public function updateQuality(): void + public function updateQuality(): array { foreach ($this->items as $item) { if ($item->name != 'Aged Brie' and $item->name != 'Backstage passes to a TAFKAL80ETC concert') { @@ -63,5 +69,26 @@ final class GildedRose } } } + + return $this->items; + } + + public function updateQuality1(): array + { + foreach ($this->items as $item) { + $handler = match ($item->name) { + 'Aged Brie' => new AgedBrieItemHandler(), + 'Sulfuras, Hand of Ragnaros' => new SulfarusItemHandler(), + 'Backstage passes to a TAFKAL80ETC concert' => new BackStageItemHandler(), + 'Conjured Mana Cake' => new ConjuredItemHandler(), + default => new DefaultItemHandler(), + }; + + $handler->handle($item); + + unset($handler); + } + + return $this->items; } } diff --git a/php/src/Handlers/AgedBrieItemHandler.php b/php/src/Handlers/AgedBrieItemHandler.php new file mode 100644 index 00000000..45b11982 --- /dev/null +++ b/php/src/Handlers/AgedBrieItemHandler.php @@ -0,0 +1,28 @@ +sellIn = $this->changeSallIn($item->sellIn); + $item->quality = $this->changeQuality($item->quality, $item->sellIn); + + return $item; + } + + + private function changeQuality(int $quality, int $sallIn): int + { + //Todo добавить реализацию метода + return $quality; + } + private function changeSallIn(int $sallIn): int + { + //Todo добавить реализацию метода + return $sallIn; + } +} \ No newline at end of file diff --git a/php/src/Handlers/BackStageItemHandler.php b/php/src/Handlers/BackStageItemHandler.php new file mode 100644 index 00000000..a18f457c --- /dev/null +++ b/php/src/Handlers/BackStageItemHandler.php @@ -0,0 +1,28 @@ +sellIn = $this->changeSallIn($item->sellIn); + $item->quality = $this->changeQuality($item->quality, $item->sellIn); + + return $item; + } + + + private function changeQuality(int $quality, int $sallIn): int + { + //Todo добавить реализацию метода + return $quality; + } + private function changeSallIn(int $sallIn): int + { + //Todo добавить реализацию метода + return $sallIn; + } +} \ No newline at end of file diff --git a/php/src/Handlers/ConjuredItemHandler.php b/php/src/Handlers/ConjuredItemHandler.php new file mode 100644 index 00000000..1ebaa711 --- /dev/null +++ b/php/src/Handlers/ConjuredItemHandler.php @@ -0,0 +1,28 @@ +sellIn = $this->changeSallIn($item->sellIn); + $item->quality = $this->changeQuality($item->quality, $item->sellIn); + + return $item; + } + + + private function changeQuality(int $quality, int $sallIn): int + { + //Todo добавить реализацию метода + return $quality; + } + private function changeSallIn(int $sallIn): int + { + //Todo добавить реализацию метода + return $sallIn; + } +} \ No newline at end of file diff --git a/php/src/Handlers/DefaultItemHandler.php b/php/src/Handlers/DefaultItemHandler.php new file mode 100644 index 00000000..3daf0c26 --- /dev/null +++ b/php/src/Handlers/DefaultItemHandler.php @@ -0,0 +1,40 @@ +sellIn = $this->changeSallIn($item->sellIn); + $item->quality = $this->changeQuality($item->quality, $item->sellIn); + + return $item; + } + + + private function changeQuality(int $quality, int $sallIn): int + { + if ($quality === 0) { + return 0; + } + + if ($sallIn === 0) { + return $quality - self::KOEF_DECREASE; + } + + return $quality - 1; + } + private function changeSallIn(int $sallIn): int + { + if ($sallIn === 0) { + return 0; + } + + return $sallIn - 1; + } +} \ No newline at end of file diff --git a/php/src/Handlers/ItemHandlerInterface.php b/php/src/Handlers/ItemHandlerInterface.php new file mode 100644 index 00000000..2d6f1b5e --- /dev/null +++ b/php/src/Handlers/ItemHandlerInterface.php @@ -0,0 +1,10 @@ +sellIn = $this->changeSallIn($item->sellIn); + $item->quality = $this->changeQuality($item->quality, $item->sellIn); + + return $item; + } + + + private function changeQuality(int $quality, int $sallIn): int + { + //Todo добавить реализацию метода + return $quality; + } + private function changeSallIn(int $sallIn): int + { + //Todo добавить реализацию метода + return $sallIn; + } +} \ No newline at end of file diff --git a/php/tests/ApprovalTest.php b/php/tests/ApprovalTest.php deleted file mode 100644 index 0c7220e3..00000000 --- a/php/tests/ApprovalTest.php +++ /dev/null @@ -1,44 +0,0 @@ -"foo" is more similar to the unit test from the 'Java' version - *