From 42ee1495ce0b36acc981945dc84ef21d49b4b75f Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Wed, 3 Apr 2024 16:43:12 +0500 Subject: [PATCH 01/10] add readLogFile --- files/text.txt | 2 ++ index.php | 28 +++++++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 files/text.txt diff --git a/files/text.txt b/files/text.txt new file mode 100644 index 0000000..58f1226 --- /dev/null +++ b/files/text.txt @@ -0,0 +1,2 @@ +Раз, два, три, четыре, +Пять, шесть, семь, восемь. \ No newline at end of file diff --git a/index.php b/index.php index 01fede9..d452995 100644 --- a/index.php +++ b/index.php @@ -1,13 +1,23 @@ format("%a") ; + * Напиши функцию, которая принимает путь до файла, + * проверяет, что файл существует и выводит пользователю весь контент файла + * (файл можешь создать любой) + * @param string $filePath путь до файла + * @return void + */ +function readLogFile(string $filePath): void { + if (file_exists($filePath)) { + $text = ""; + $file = fopen($filePath, "r"); + while(!feof($file)) { + $line = fgets($file); + $text .= $line; + } + fclose($file); + print($text); + } + else print("Такого файла не существует."); } ?> @@ -21,7 +31,7 @@ function diffDays(DateTimeImmutable $dateStart, DateTimeImmutable $dateEnd): int \ No newline at end of file -- GitLab From 69cf4ad118fe169096aedced798d1a2274515cbc Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Wed, 3 Apr 2024 18:45:10 +0500 Subject: [PATCH 02/10] add readFileLineByLine --- index.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/index.php b/index.php index d452995..dac3f2e 100644 --- a/index.php +++ b/index.php @@ -1,23 +1,20 @@ @@ -31,7 +28,9 @@ function readLogFile(string $filePath): void { \ No newline at end of file -- GitLab From f2eaca3319d895dbf9836bea3376e766944ea72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=BB=D0=B0=D0=BD=20=D0=A8=D0=B0=D0=BC=D0=B0?= =?UTF-8?q?=D0=B2=D0=BE=D0=B2?= Date: Tue, 9 Apr 2024 05:36:59 +0000 Subject: [PATCH 03/10] fix --- index.php | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/index.php b/index.php index dac3f2e..04d1521 100644 --- a/index.php +++ b/index.php @@ -6,31 +6,26 @@ * @param string $filePath путь до файла * @return void */ -function readFileLineByLine(string $filePath): iterable { +function readLogFile(string $filePath): void { if (file_exists($filePath)) { + $text = ""; $file = fopen($filePath, "r"); while(!feof($file)) { - yield fgets($file); + $line = fgets($file); + $text .= $line; } fclose($file); + print($text); } - else yield "Такого файла не существует."; + else print("Такого файла не существует."); } ?> - - - - - - - Document - \ No newline at end of file + -- GitLab From 62ab1944afa41f1fb833d18b3044bb6ddb47dfc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=BB=D0=B0=D0=BD=20=D0=A8=D0=B0=D0=BC=D0=B0?= =?UTF-8?q?=D0=B2=D0=BE=D0=B2?= Date: Tue, 9 Apr 2024 05:37:43 +0000 Subject: [PATCH 04/10] fix2 --- index.php | 1 - 1 file changed, 1 deletion(-) diff --git a/index.php b/index.php index 04d1521..5db9efb 100644 --- a/index.php +++ b/index.php @@ -24,7 +24,6 @@ function readLogFile(string $filePath): void { -- GitLab From fb346737292b84e5371d732f21d4271c4db8e4fa Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Wed, 10 Apr 2024 17:52:34 +0500 Subject: [PATCH 05/10] fix --- index.php | 7 ------- src/Functions.php | 26 -------------------------- 2 files changed, 33 deletions(-) diff --git a/index.php b/index.php index 5e1db12..3a16676 100644 --- a/index.php +++ b/index.php @@ -93,12 +93,5 @@ $func = new Hp\Test\Functions(); readLogFile(__DIR__ . "/public/text.txt"); ?> - -

Function 9

- readFileLineByLine(__DIR__ . "/public/text.txt") as $line) { - print($line); - } - ?> \ No newline at end of file diff --git a/src/Functions.php b/src/Functions.php index 3523f74..1b7b6bc 100644 --- a/src/Functions.php +++ b/src/Functions.php @@ -155,13 +155,6 @@ class Functions { return $dateInterval->format("%a") ; } - /** - * Переделай своё решение 8 задачи: - * замени вывод всего текста из файла разом на - * построчный вывод используя yield - * @param string $filePath путь до файла - * @return void - */ function readLogFile(string $filePath): void { if (file_exists($filePath)) { $text = ""; @@ -175,24 +168,5 @@ class Functions { } else print("Такого файла не существует."); } - - - /** - * Переделай своё решение 8 задачи: - * замени вывод всего текста из файла разом на - * построчный вывод используя yield - * @param string $filePath путь до файла - * @return void - */ - function readFileLineByLine(string $filePath): iterable { - if (file_exists($filePath)) { - $file = fopen($filePath, "r"); - while(!feof($file)) { - yield fgets($file); - } - fclose($file); - } - else yield "Такого файла не существует."; - } } -- GitLab From 754559a0ff2574bb28a7ac2883f8594deed666a0 Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Wed, 10 Apr 2024 17:57:08 +0500 Subject: [PATCH 06/10] fixes2 --- index.php | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/index.php b/index.php index d5e0028..3a16676 100644 --- a/index.php +++ b/index.php @@ -1,26 +1,17 @@ + + + + + + + Document

Function 1

@@ -86,7 +77,21 @@ function readLogFile(string $filePath): void {

Function 6

Пятницы 13: "); + foreach($func->countFriday13(2024) as $date) { + print($date->format("Y-m-d l") . "\n"); + } + ?> + +

Function 7

+ Разница дней: "); + print($func->diffDays(new DateTimeImmutable(), new DateTimeImmutable("2025-01-01"))); + ?> + +

Function 8

+ readLogFile(__DIR__ . "/public/text.txt"); ?> - + \ No newline at end of file -- GitLab From 8e96349db754efb0723a8a02ed357cfa453eb6be Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Thu, 11 Apr 2024 12:26:23 +0500 Subject: [PATCH 07/10] refactoring --- files/text.txt | 2 - vendor/autoload.php | 25 - vendor/composer/ClassLoader.php | 579 ------------------------ vendor/composer/LICENSE | 21 - vendor/composer/autoload_classmap.php | 10 - vendor/composer/autoload_namespaces.php | 9 - vendor/composer/autoload_psr4.php | 10 - vendor/composer/autoload_real.php | 36 -- vendor/composer/autoload_static.php | 36 -- 9 files changed, 728 deletions(-) delete mode 100644 files/text.txt delete mode 100644 vendor/autoload.php delete mode 100644 vendor/composer/ClassLoader.php delete mode 100644 vendor/composer/LICENSE delete mode 100644 vendor/composer/autoload_classmap.php delete mode 100644 vendor/composer/autoload_namespaces.php delete mode 100644 vendor/composer/autoload_psr4.php delete mode 100644 vendor/composer/autoload_real.php delete mode 100644 vendor/composer/autoload_static.php diff --git a/files/text.txt b/files/text.txt deleted file mode 100644 index 58f1226..0000000 --- a/files/text.txt +++ /dev/null @@ -1,2 +0,0 @@ -Раз, два, три, четыре, -Пять, шесть, семь, восемь. \ No newline at end of file diff --git a/vendor/autoload.php b/vendor/autoload.php deleted file mode 100644 index a3d2b61..0000000 --- a/vendor/autoload.php +++ /dev/null @@ -1,25 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var \Closure(string):void */ - private static $includeFile; - - /** @var string|null */ - private $vendorDir; - - // PSR-4 - /** - * @var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var list - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * List of PSR-0 prefixes - * - * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) - * - * @var array>> - */ - private $prefixesPsr0 = array(); - /** - * @var list - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var array - */ - private $missingClasses = array(); - - /** @var string|null */ - private $apcuPrefix; - - /** - * @var array - */ - private static $registeredLoaders = array(); - - /** - * @param string|null $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); - } - - /** - * @return array> - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return list - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return list - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return array Array of classname => path - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders keyed by their corresponding vendor directories. - * - * @return array - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } - - /** - * @return void - */ - private static function initializeIncludeClosure() - { - if (self::$includeFile !== null) { - return; - } - - /** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - */ - self::$includeFile = \Closure::bind(static function($file) { - include $file; - }, null, null); - } -} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE deleted file mode 100644 index f27399a..0000000 --- a/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php deleted file mode 100644 index 0fb0a2c..0000000 --- a/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,10 +0,0 @@ - $vendorDir . '/composer/InstalledVersions.php', -); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3..0000000 --- a/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($baseDir . '/src'), -); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php deleted file mode 100644 index f82ac6e..0000000 --- a/vendor/composer/autoload_real.php +++ /dev/null @@ -1,36 +0,0 @@ -register(true); - - return $loader; - } -} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php deleted file mode 100644 index 7a21546..0000000 --- a/vendor/composer/autoload_static.php +++ /dev/null @@ -1,36 +0,0 @@ - - array ( - 'Hp\\Test\\' => 8, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Hp\\Test\\' => - array ( - 0 => __DIR__ . '/../..' . '/src', - ), - ); - - public static $classMap = array ( - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit3bc055e7cfe85029886df43c57958e8c::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit3bc055e7cfe85029886df43c57958e8c::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit3bc055e7cfe85029886df43c57958e8c::$classMap; - - }, null, ClassLoader::class); - } -} -- GitLab From 3804c7ead95bdd2b1279cd33cba1992b1055796b Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Thu, 11 Apr 2024 12:26:28 +0500 Subject: [PATCH 08/10] refactoring --- .gitignore | 1 + index.php | 72 +++++++++---- src/Functions.php | 253 +++++++++++++++++++++++++++------------------- 3 files changed, 204 insertions(+), 122 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49ce3c1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/vendor \ No newline at end of file diff --git a/index.php b/index.php index 3a16676..c4c770b 100644 --- a/index.php +++ b/index.php @@ -6,6 +6,23 @@ $func = new Hp\Test\Functions(); ?> + + + + + + Document + + + + @@ -17,11 +34,11 @@ $func = new Hp\Test\Functions();

Function 1

10, 'count'=>2], - ['price'=>5, 'count'=>5], - ['price'=>8, 'count'=>5], - ['price'=>12, 'count'=>4], - ['price'=>8, 'count'=>4], + ['price'=>10, 'count'=>2], + ['price'=>5, 'count'=>5], + ['price'=>8, 'count'=>5], + ['price'=>12, 'count'=>4], + ['price'=>8, 'count'=>4], ]; print_r($func->sortPrice($array)); ?> @@ -29,25 +46,27 @@ $func = new Hp\Test\Functions();

Function 2

10, 'name'=>'Jhon', 'age'=>23], - ['id'=>32, 'name'=>'Alex', 'age'=>34], - ['id'=>54, 'name'=>'Bob', 'age'=>45], + ['id'=>10, 'name'=>'Jhon', 'age'=>23], + ['id'=>32, 'name'=>'Alex', 'age'=>34], + ['id'=>54, 'name'=>'Bob', 'age'=>45], ['id'=>6, 'name'=>'Mike', 'age'=>61], ]; print_r($func->search($array, 54)); ?> +

Function 3

uniqElements($arr)); ?> +

Function 4

'Товары для ухода за одеждой','depth' => 1,], ['name' => 'Аксессуары для техники','depth' => 1,], ['name' => 'Товары для дома и кухни','depth' => 0,], - ['name' => 'Посуда','depth' => 1,], - ]; + ['name' => 'Посуда','depth' => 1,], + ]; print_r($func->prepareMenu($aMenu)); ?>

Function 5

До НГ: "); - print($func->howDaysToNy(new DateTimeImmutable())); + print "

До НГ:

"; + try { + print $func->howDaysToNy(new DateTimeImmutable()); + } catch (Exception $e) { + print $e->getMessage(); + } ?> +

Function 6

Пятницы 13: "); - foreach($func->countFriday13(2024) as $date) { - print($date->format("Y-m-d l") . "\n"); + print "

Пятницы 13:

"; + try { + foreach ($func->countFriday13(2024) as $date) { + print $date->format("Y-m-d l") . "\n"; + } + } catch (Exception $e) { + print $e->getMessage(); } ?> +

Function 7

Разница дней: "); - print($func->diffDays(new DateTimeImmutable(), new DateTimeImmutable("2025-01-01"))); + print "

Разница дней:

"; + print $func->diffDays(new DateTimeImmutable(), new DateTimeImmutable("2025-01-01")); ?> +

Function 8

readLogFile(__DIR__ . "/public/text.txt"); + try { + $func->readLogFile(__DIR__ . "/public/text.txt"); + } catch (Exception $e) { + print $e->getMessage(); + } ?> \ No newline at end of file diff --git a/src/Functions.php b/src/Functions.php index 1b7b6bc..b4f3ad2 100644 --- a/src/Functions.php +++ b/src/Functions.php @@ -1,74 +1,98 @@ 12, 'count'=>4], ['price'=>10, 'count'=>2], ['price'=>8, 'count'=>4], ['price'=>8, 'count'=>5], ['price'=>5, 'count'=>5], ] + /** + * На выход должна вернуть отсортированный массив по ключу *price* DESC + * и во вторую очередь по *count* ASC: + * [['price'=>12, 'count'=>4], ['price'=>10, 'count'=>2], ['price'=>8, 'count'=>4], + * ['price'=>8, 'count'=>5], ['price'=>5, 'count'=>5],] + */ + /** + * Найдет элемент с указаным id + * @param array $array - массив, содержащий элементы со структурой + * [ + * 'id' => 30, + * 'name' => 'Jhon', + * 'age' => 23, + * ] + * @param $id - ид искомого элемента + * @return ?array - найденный элемент + */ - /* Найдет элемент с указаным id * - * @param array $array - массив, содержащий элементы со структурой * - [ - * 'id' => 30, * - 'name' => 'Jhon', * - 'age' => 23, * - ] - * @param $id - ид искомого элемента * - * @return array - найденный элемент - */ - function search($array, $id): ?array { - $rowId = array_search($id, array_column($array, 'id')); - return $array[$rowId]; + public function search(array $array, int $id): ?array + { + $rowId = array_search($id, array_column($array, 'id'), true); + if ($rowId) { + return $array[$rowId]; + } + return null; } - /** - * Удалить дубликаты, оставив только уникальные значения - * @param array $array - * @return array - */ + /** + * Удалить дубликаты, оставив только уникальные значения + * @param array $array + * @return array + */ - function uniqElements(array $array): array { + public function uniqElements(array $array): array + { return array_unique($array, SORT_REGULAR); - } + } - //Выходной массив: - /** Array ( + /** + * Выходной массив: + * Array ( * [0] => Array([0] => laravel, [1] => php) * [1] => Array([0] => codeigniter, [1] => php) - * [3] => Array([0] => c++, [1] => java)) + * [3] => Array([0] => c++, [1] => java)) * ) - */ - - /** - * Сгруппировать подразедлы в верхние разделы меню - * Дочерние элементы поместить в массив родителя с ключом submenu * - * Значение под ключом depth определяет уровень раздела * - * Массив $aMenu всегда начинается с элемента depth = 0, - * все последующие элементы с depth = 1 являются его дочерними * - * элементами * * - * @param array $aMenu * * - * @return array - */ - - function prepareMenu(array $aMenu): array { + */ + + /** + * Сгруппировать подразедлы в верхние разделы меню + * Дочерние элементы поместить в массив родителя с ключом submenu + * Значение под ключом depth определяет уровень раздела + * Массив $aMenu всегда начинается с элемента depth = 0, + * все последующие элементы с depth = 1 являются его дочерними + * элементами + * @param array $aMenu + * @return array + */ + + public function prepareMenu(array $aMenu): array + { $result = []; foreach ($aMenu as $arr) { if ($arr['depth'] === 0) { @@ -85,88 +109,111 @@ class Functions { ); } return $result; - } + } - /** Выходные данные: + /** + * Выходные данные: * $aMenu = [ * [ - * 'name' => 'Смартфоны и гаджеты', - * 'depth' => 0, - * 'submenu' => [ - * ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,], - * ['name' => 'Планшеты','depth' => 1,], - * ['name' => 'Наушники и гарнитуры','depth' => 1,] - * ,] - * ,], - * [ - * 'name' => 'Компьютеры и ноутбуки', - * 'depth' => 0, - * 'submenu' => [ - * ['name' => 'Ноутбуки и аксессуары','depth' => 1,], - * ['name' => 'Компьютеры и мониторы','depth' => 1,], - * ['name' => 'Компьютерные комплектующие','depth' => 1,],]], - * [ - * 'name' => 'Техника для дома', - * 'depth' => 0, - * 'submenu' => [ - * ['name' => 'Техника для уборки','depth' => 1,], - * ['name' => 'Товары для ухода за одеждой','depth' => 1,], - * ['name' => 'Аксессуары для техники','depth' => 1,],]], - * [ - * 'name' => 'Товары для дома и кухни','depth' => 0, - * 'submenu' => [ - * ['name' => 'Посуда','depth' => 1,],]], ]; - */ - - /** - * Функция рассчитывает кол-во дней до нового года - * @param DateTime $date дата от которой, необходимо рассчитать кол-во дней - * @return int - */ - function howDaysToNy(DateTimeImmutable $date): int { - $endYear = date("Y-12-31", date_timestamp_get($date)); + * 'name' => 'Смартфоны и гаджеты', + * 'depth' => 0, + * 'submenu' => [ + * ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,], + * ['name' => 'Планшеты','depth' => 1,], + * ['name' => 'Наушники и гарнитуры','depth' => 1,],], + * ], + * [ + * 'name' => 'Компьютеры и ноутбуки', + * 'depth' => 0, + * 'submenu' => [ + * ['name' => 'Ноутбуки и аксессуары','depth' => 1,], + * ['name' => 'Компьютеры и мониторы','depth' => 1,], + * ['name' => 'Компьютерные комплектующие','depth' => 1,],]], + * [ + * 'name' => 'Техника для дома', + * 'depth' => 0, + * 'submenu' => [ + * ['name' => 'Техника для уборки','depth' => 1,], + * ['name' => 'Товары для ухода за одеждой','depth' => 1,], + * ['name' => 'Аксессуары для техники','depth' => 1,],] + * ], + * [ + * 'name' => 'Товары для дома и кухни', + * 'depth' => 0, + * 'submenu' => [ + * ['name' => 'Посуда','depth' => 1,],]], + * ]; + */ + + /** + * Функция рассчитывает кол-во дней до нового года + * @param DateTimeImmutable $date дата от которой, необходимо рассчитать кол-во дней + * @return int + * @throws Exception + */ + + public function howDaysToNy(DateTimeImmutable $date): int + { + $endYear = date("Y-12-31", date_timestamp_get($date)); $dateInterval = date_diff(new DateTimeImmutable($endYear), $date); - return $dateInterval->format("%a") + 1; + return (int)$dateInterval->format("%a") + 1; } - /** - * Вернет все пятницы 13 в году - * @param int $yaer год, в котором необходимо произвести расчет - * @return DateTimeImmutable[] - */ - function countFriday13(int $year): iterable { - $stardDate = new DateTime("{$year}-01-01 Friday"); - $year += 1; - $endDate = new DateTime("{$year}-01-01"); + + /** + * Вернет все пятницы 13 в году + * @param int $year год, в котором необходимо произвести расчет + * @return DateTimeImmutable[] + * @throws Exception + */ + + public function countFriday13(int $year): iterable + { + $startDate = new DateTime("$year-01-01 Friday"); + ++$year; + $endDate = new DateTime("$year-01-01"); $interval = new DateInterval('P7D'); - foreach(new DatePeriod($stardDate, $interval, $endDate) as $day) { + foreach (new DatePeriod($startDate, $interval, $endDate) as $day) { yield new DateTimeImmutable($day->format("Y-m-d")); } } - /** - * Вернет кол-во дней между датами + /** + * Вернет кол-во дней между датами * @param DateTimeImmutable $dateStart дата начала * @param DateTimeImmutable $dateEnd дата окончания * @return int */ - function diffDays(DateTimeImmutable $dateStart, DateTimeImmutable $dateEnd): int { + public function diffDays(DateTimeImmutable $dateStart, DateTimeImmutable $dateEnd): int + { $dateInterval = date_diff($dateStart, $dateEnd); - return $dateInterval->format("%a") ; + return (int)$dateInterval->format("%a") ; } - function readLogFile(string $filePath): void { + /** + * Напиши функцию, которая принимает путь до файла, + * проверяет, что файл существует и выводит пользователю весь контент файла + * (файл можешь создать любой) + * @param string $filePath путь до файла + * @return void + * @throws Exception + */ + + public function readLogFile(string $filePath): void + { if (file_exists($filePath)) { $text = ""; - $file = fopen($filePath, "r"); + $file = fopen($filePath, 'rb'); while(!feof($file)) { $line = fgets($file); $text .= $line; } fclose($file); - print($text); + print $text; + } + else { + throw new RuntimeException("File not found: $filePath"); } - else print("Такого файла не существует."); } } -- GitLab From 5c3550e52932dd71590e2bcd50df10dc2b01eddc Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Thu, 11 Apr 2024 12:34:19 +0500 Subject: [PATCH 09/10] refactoring --- index.php | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/index.php b/index.php index c4c770b..3ffc3cc 100644 --- a/index.php +++ b/index.php @@ -1,26 +1,11 @@ - - - - - - - Document - - - -- GitLab From 8be5eebaaee396fada08c76228fc814c24537615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=BB=D0=B0=D0=BD=20=D0=A8=D0=B0=D0=BC=D0=B0?= =?UTF-8?q?=D0=B2=D0=BE=D0=B2?= Date: Fri, 12 Apr 2024 09:37:50 +0000 Subject: [PATCH 10/10] fix --- index.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/index.php b/index.php index 41dc3b1..075276b 100644 --- a/index.php +++ b/index.php @@ -5,8 +5,7 @@ use Hp\Test\Functions; $func = new Functions(); - - $func = new Functions(); + ?> -- GitLab