FeipAPI/Mirzaev/Feip/Params/Age.php

77 lines
1.9 KiB
PHP
Raw Permalink Normal View History

2020-10-02 21:11:19 +07:00
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр возраста
*
* @property int $age Возраст
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait Age
{
/**
* Возраст: параметр
*
* @var int
*/
protected int $age = 0;
/**
* Возраст: фильтр
*
* @param string|int|float $target Значение для фильтрации
*
* @return int|null
*/
public static function age($target): ?int
{
// Очистка
if ($sanitized = filter_var($target, FILTER_CALLBACK, array('options' => [self::class, 'onlyNumbers']))) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== (int) $target) {
// Если очищенное значение не совпадает с отправленным
new Error(200, __FUNCTION__);
} else if (filter_var($sanitized, FILTER_VALIDATE_INT) && $sanitized > 0 && $sanitized <= 150) {
return (int) $sanitized;
}
} else {
new Error(200, __FUNCTION__);
}
return null;
}
/**
* Возраст: очистка
*
* @param string|int|float $target Значение для очистки
*
* @return string|null
*/
public static function onlyNumbers($target): int
{
// Поиск цифр
preg_match_all('/[0-9]*/', $target, $match);
// Инициализация
$result = '';
// Конкатанация найденных цифр
foreach ($match[0] as $number) {
$result .= $number;
}
// В задании было сказано: для номеров тип string
return (int) $result;
}
}