You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
6.9 KiB
167 lines
6.9 KiB
1 year ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* The MIT License
|
||
|
*
|
||
|
* Copyright (c) 2020 "YooMoney", NBСO LLC
|
||
|
*
|
||
|
* 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.
|
||
|
*/
|
||
|
|
||
|
namespace YooKassa\Helpers;
|
||
|
|
||
|
/**
|
||
|
* Класс хэлпера для генерации случайных значений, используется в тестах
|
||
|
*
|
||
|
* @package YooKassa\Helpers
|
||
|
*/
|
||
|
class Random
|
||
|
{
|
||
|
/**
|
||
|
* Возвращает рандомное целое число. По умолчанию возвращает число от нуля до PHP_INT_MAX.
|
||
|
* @param int|null $min Минимально возможное значение
|
||
|
* @param int|null $max Максимально возможное значение
|
||
|
* @param bool $useBest Использовать ли функцию random_int если она доступна
|
||
|
* @return int Рандомное целое число
|
||
|
* @throws \Exception
|
||
|
*/
|
||
|
public static function int($min = null, $max = null, $useBest = true)
|
||
|
{
|
||
|
if ($min === null) {
|
||
|
$min = 0;
|
||
|
}
|
||
|
if ($max === null) {
|
||
|
$max = PHP_INT_MAX;
|
||
|
}
|
||
|
if (function_exists('random_int') && $useBest) {
|
||
|
return random_int($min, $max);
|
||
|
} else {
|
||
|
return mt_rand($min, $max);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает рандомное число с плавающей точкой. По умолчанию возвращает значение в промежутке от нуля до едениы.
|
||
|
* @param float|null $min Минимально возможное значение
|
||
|
* @param float|null $max Максимально возможное значение
|
||
|
* @param bool $useBest Использовать ли функцию random_int если она доступна
|
||
|
* @return float Рандомное число с плавающей точкой
|
||
|
* @throws \Exception
|
||
|
*/
|
||
|
public static function float($min = null, $max = null, $useBest = true)
|
||
|
{
|
||
|
$random = self::int(null, null, $useBest) / PHP_INT_MAX;
|
||
|
if ($min === null) {
|
||
|
$min = 0.0;
|
||
|
}
|
||
|
if ($max === null) {
|
||
|
return $random + $min;
|
||
|
}
|
||
|
return ($random * ($max - $min)) + $min;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает строку из рандомных символов
|
||
|
* @param int $length Длина возвращаемой строки, или минимальная длина, если передан парамтр $maxLength
|
||
|
* @param int|null $maxLength Если параметр не равен null, возвращает сроку длиной от $length до $maxLength
|
||
|
* @param string|array|null $characters Строка или массив используемых в строке символов
|
||
|
* @param bool $useBest Использовать ли функцию random_int если она доступна
|
||
|
* @return string Строка, состоящая из рандомных символов
|
||
|
* @throws \Exception
|
||
|
*/
|
||
|
public static function str($length, $maxLength = null, $characters = null, $useBest = true)
|
||
|
{
|
||
|
$result = '';
|
||
|
if ($maxLength !== null) {
|
||
|
if (is_string($maxLength)) {
|
||
|
$characters = $maxLength;
|
||
|
} else {
|
||
|
$length = self::int($length, $maxLength, $useBest);
|
||
|
}
|
||
|
}
|
||
|
if ($characters === null) {
|
||
|
for ($i = 0; $i < $length; $i++) {
|
||
|
$chr = chr(self::int(32, 125, $useBest));
|
||
|
$result .= $chr;
|
||
|
}
|
||
|
} else {
|
||
|
for ($i = 0; $i < $length; $i++) {
|
||
|
$chr = $characters[self::int(0, strlen($characters) - 1, $useBest)];
|
||
|
$result .= $chr;
|
||
|
}
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает строку, состоящую из символов '0123456789abcdef'
|
||
|
* @param int $length Длина возвращаемой строки
|
||
|
* @param bool $useBest Использовать ли функцию random_int если она доступна
|
||
|
* @return string Строка, состоящая из рандомных символов
|
||
|
* @throws \Exception
|
||
|
*/
|
||
|
public static function hex($length, $useBest = true)
|
||
|
{
|
||
|
return self::str($length, '0123456789abcdef', $useBest);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает рандомную последовательность байт
|
||
|
* @param int $length Длина возвращаемой строки
|
||
|
* @param bool $useBest Использовать ли функцию random_int если она доступна
|
||
|
* @return string Строка, состоящая из рандомных символов
|
||
|
* @throws \Exception
|
||
|
*/
|
||
|
public static function bytes($length, $useBest = true)
|
||
|
{
|
||
|
if (function_exists('random_bytes') && $useBest) {
|
||
|
$result = random_bytes($length);
|
||
|
} else {
|
||
|
$result = '';
|
||
|
for ($i = 0; $i < $length; $i++) {
|
||
|
$chr = chr(self::int(0, 255));
|
||
|
$result .= $chr;
|
||
|
}
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает рандомное значение из переданного массива
|
||
|
* @param array $values Массив источник данных
|
||
|
* @param bool $useBest Использовать ли функцию random_int если она доступна
|
||
|
* @return mixed Случайное значение из переданного массива
|
||
|
* @throws \Exception
|
||
|
*/
|
||
|
public static function value(array $values, $useBest = true)
|
||
|
{
|
||
|
return $values[self::int(0, count($values) - 1, $useBest)];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает рандомное буллево значение
|
||
|
* @return bool Либо true либо false, одно из двух
|
||
|
* @throws \Exception
|
||
|
*/
|
||
|
public static function bool()
|
||
|
{
|
||
|
return self::int(0, 1) === 1;
|
||
|
}
|
||
|
}
|