Поместите функцию в класс как public-метод и вызывайте через экземпляр. Проверка отрицательного аргумента сохраняется; для больших n нужно учитывать предел int.
Интеграция вычисления факториала в метод класса
Поместите функцию в класс как public-метод и вызывайте через экземпляр. Проверка отрицательного аргумента сохраняется; для больших n нужно учитывать предел int.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В задании требуется превратить существующую функцию, вычисляющую факториал числа, в метод внутри пользовательского класса. При этом логика вычисления должна остаться прежней, а обработка отрицательных аргументов – выбрасывать исключение.
function factorial(int $num): int
{
if ($num < 0) {
throw new Exception('num less 0');
}
$resultNum = 1;
for($i = 1; $i <= $num; $i++)
{
$resultNum *= $i;
}
return $resultNum;
}
try {
echo factorial(-5);
} catch (Exception $e) {
echo $e->getMessage();
}
Перенесите эту реализацию в класс, сделав её методом, и продемонстрируйте её работу, корректно обрабатывая возможные ошибки.
Ответ
Поместите функцию в класс как public-метод и вызывайте через экземпляр. Проверка отрицательного аргумента сохраняется; для больших n нужно учитывать предел int.
class Math {
public function factorial(int $num): int {
if ($num < 0) throw new Exception('num less 0');
$result = 1;
for ($i = 2; $i <= $num; $i++) {
if ($result > intdiv(PHP_INT_MAX, $i)) throw new OverflowException();
$result *= $i;
}
return $result;
}
}
try { echo (new Math())->factorial(-5); }
catch (Exception $e) { echo $e->getMessage(); }
Пример выведет num less 0; для 0 результат равен 1. Проверка переполнения предотвращает неявный переход результата к float.