*/ 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; } }