Hash = match ($hashBy) { HashGetType::ByString => $this->pGetHash($str), HashGetType::ByFile => $this->pGetFileHash($str), HashGetType::ByHash => $str }; } /** * Получение хэша файла по строке. * * @param string $str Строка. * * @return string Хэш строки. */ private function pGetHash (string $str): string { return hash('sha256', $str); } /** * Получение хэша файла по имени файла. * * @param string $fileName Имя файла. * * @return string Хэш файла. */ private function pGetFileHash (string $fileName): string { return hash_file('sha256', $fileName); } /** * Сравнивает текущий хэш с хэшем otherHash и выдаёт true, если совпадают, и * false, если не совпадают. * * @param FileHash $otherHash Другой хэш. * * @return bool true, если совпадают, и false, если не совпадают. */ public function IsEqual (FileHash $otherHash): bool { return StringExtension::Compare($this->Hash, $otherHash->Hash, true) === 0; } /** * Проверяет, совпадает ли хэш с хэшем/файлом/строкой str. * * @param string $str Хэш, строка или имя файла. * @param HashGetType $hashBy Тип получения хэша. * * @return bool true, если совпадают, и false, если не совпадают. */ public function Validate (string $str, HashGetType $hashBy): bool { return match ($hashBy) { HashGetType::ByString => $this->pGetHash($str) == $this->Hash, HashGetType::ByFile => $this->pGetFileHash($str) == $this->Hash, HashGetType::ByHash => $str == $this->Hash, }; } /** * @inheritDoc */ public function Serialize (): string { return serialize($this->Hash); } /** * @inheritDoc */ public function UnSerialize (string $serialized): void { $this->Hash = unserialize($serialized); } }