From 353c764163e1276bb804cbda81a99265b4576424 Mon Sep 17 00:00:00 2001 From: Viktor Date: Mon, 4 Apr 2022 21:46:17 +0300 Subject: [PATCH 1/4] hw16 --- .gitignore | 5 ++++ README.md | 17 ++++++++++++- new/Application.php | 33 ++++++++++++++++++++++++ new/Check.php | 32 ++++++++++++++++++++++++ new/RequestValidator.php | 16 ++++++++++++ new/Response.php | 19 ++++++++++++++ old/Application.php | 54 ++++++++++++++++++++++++++++++++++++++++ old/RequestValidator.php | 16 ++++++++++++ old/Response.php | 19 ++++++++++++++ 9 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 new/Application.php create mode 100644 new/Check.php create mode 100644 new/RequestValidator.php create mode 100644 new/Response.php create mode 100644 old/Application.php create mode 100644 old/RequestValidator.php create mode 100644 old/Response.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2ccf1cf6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +.idea/* +code/* +nginx/* +redis/* diff --git a/README.md b/README.md index 6490de86..c0d3e2b3 100644 --- a/README.md +++ b/README.md @@ -1 +1,16 @@ -# PHP2021 \ No newline at end of file +### старый код в папке old, новый в new + +После рефакторинга кода согласно принципам solid +проверка правильности ввода данных выведена в отдельный +класс Check из Application. + +В новый класс Check перенесены переменные: + +private $openBracket = '('; -> static $openBracket = '('; + +private $closeBracket = ')'; -> static $closeBracket = ')'; + +Так же функция проверки пары checkBracketPairs() перенесена +в класс Check; + + diff --git a/new/Application.php b/new/Application.php new file mode 100644 index 00000000..7431a4dc --- /dev/null +++ b/new/Application.php @@ -0,0 +1,33 @@ +request = $_POST; + } + + public function run() + { + if (!isset($this->request['STRING']) || empty($this->request['STRING'])) { + throw new \Exception('No string passed'); + } + if (strpos($this->request['STRING'], Check::$openBracket) === false || + strpos($this->request['STRING'], Check::$closeBracket ) === false) { + throw new \Exception('No brackets passed in string'); + } + Check::checkBracketPairs($this->request['STRING']); + } +} \ No newline at end of file diff --git a/new/Check.php b/new/Check.php new file mode 100644 index 00000000..e7e7a342 --- /dev/null +++ b/new/Check.php @@ -0,0 +1,32 @@ +request = $_POST; + } + + public function run() + { + if (!isset($this->request['STRING']) || empty($this->request['STRING'])) { + throw new \Exception('No string passed'); + } + if (strpos($this->request['STRING'], $this->openBracket) === false || + strpos($this->request['STRING'], $this->closeBracket) === false) { + throw new \Exception('No brackets passed in string'); + } + $this->checkBracketPairs(); + } + + private function checkBracketPairs() + { + $arChars = str_split($this->request['STRING']); + $openBracketsCounter = 0; + foreach($arChars AS $singleChar) { + if ($singleChar == $this->closeBracket) { + if($openBracketsCounter <= 0) { + throw new \Exception('Brackets not paired'); + } + $openBracketsCounter--; + } + if ($singleChar == $this->openBracket) { + $openBracketsCounter++; + } + } + if ($openBracketsCounter) { + throw new \Exception('Brackets not paired'); + } + throw new \Exception('Everything is fine'); + } +} \ No newline at end of file diff --git a/old/RequestValidator.php b/old/RequestValidator.php new file mode 100644 index 00000000..c5339d12 --- /dev/null +++ b/old/RequestValidator.php @@ -0,0 +1,16 @@ + Date: Sat, 9 Apr 2022 16:26:28 +0300 Subject: [PATCH 2/4] homework --- uml.png | Bin 0 -> 27980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 uml.png diff --git a/uml.png b/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac393c9648ca5be097e3a9c0b48629b149629c5 GIT binary patch literal 27980 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 z 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 KG1 Date: Mon, 11 Apr 2022 22:35:44 +0300 Subject: [PATCH 3/4] ref --- new/Application.php | 12 +++++------- new/Check.php | 25 ++++++++++--------------- new/Response.php | 2 +- 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/new/Application.php b/new/Application.php index 7431a4dc..def93919 100644 --- a/new/Application.php +++ b/new/Application.php @@ -6,8 +6,7 @@ class Application { - private $request; - + public function __construct() { if (!RequestValidator::checkRequestType('POST')) { @@ -16,18 +15,17 @@ public function __construct() if (RequestValidator::checkRequestIsEmpty($_POST)) { throw new \Exception('Empty request'); } - $this->request = $_POST; } public function run() { - if (!isset($this->request['STRING']) || empty($this->request['STRING'])) { + if (!isset($_POST['STRING']) || empty($_POST['STRING'])) { throw new \Exception('No string passed'); } - if (strpos($this->request['STRING'], Check::$openBracket) === false || - strpos($this->request['STRING'], Check::$closeBracket ) === false) { + if (strpos($_POST['STRING'], Check::$openBracket) === false || + strpos($_POST['STRING'], Check::$closeBracket ) === false) { throw new \Exception('No brackets passed in string'); } - Check::checkBracketPairs($this->request['STRING']); + Check::checkBracketPairs($_POST['STRING']); } } \ No newline at end of file diff --git a/new/Check.php b/new/Check.php index e7e7a342..5955b79b 100644 --- a/new/Check.php +++ b/new/Check.php @@ -1,32 +1,27 @@ Date: Wed, 13 Apr 2022 12:38:26 +0300 Subject: [PATCH 4/4] new ref --- new/Check.php | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/new/Check.php b/new/Check.php index 5955b79b..f8ce3f90 100644 --- a/new/Check.php +++ b/new/Check.php @@ -14,14 +14,19 @@ static function checkBracketPairs(string $request) : void { $arChars = str_split($request); $openBracketsCounter = 0; - foreach($arChars AS $singleChar) { - if($openBracketsCounter <= 0) throw new \Exception('Brackets not paired'); - - if ($singleChar == self::$closeBracket) $openBracketsCounter--; - else if ($singleChar == self::$openBracket) $openBracketsCounter++; + foreach ($arChars AS $singleChar) { + if ($openBracketsCounter <= 0) { + throw new \Exception('Brackets not paired'); + } + if ($singleChar == self::$closeBracket) { + $openBracketsCounter--; + } elseif ($singleChar == self::$openBracket) { + $openBracketsCounter++; + } + } + if ($openBracketsCounter) { + throw new \Exception('Brackets not paired'); } - if ($openBracketsCounter) throw new \Exception('Brackets not paired'); - throw new \Exception(self::MESSAGE); } -} \ No newline at end of file +}