Настройка строкового представления объекта Math

Добавьте __toString(): string, возвращающий строковое представление factorial(). Тогда echo $math вызовет преобразование объекта; отрицательное число по-прежнему должно приводить к ошибке.

Короткий ответ

Что ответить на собеседовании

Добавьте __toString(): string, возвращающий строковое представление factorial(). Тогда echo $math вызовет преобразование объекта; отрицательное число по-прежнему должно приводить к ошибке.

Подробный разбор

Ответ с пояснениями

Условие

Требуется изменить существующий код так, чтобы при попытке вывести объект класса Math через echo (без явного вызова метода) отображалось значение факториала числа, переданного в конструктор.

class Math
{
    public function __construct(private int $value)
    {
    }

    public function factorial(): int
    {
        if ($this->value < 0) {
            throw new Exception("value less 0");
        }

        $product = 1;

        for ($i = 1; $i <= $this->value; $i++) {
            $product *= $i;
        }

        return $product;
    }
}

$math = new Math(-5);

try {
    echo $math->factorial();
} catch (Exception $e) {
    echo $e->getMessage();
}

Ваша задача – добавить необходимый механизм (например, магический метод __toString), который будет возвращать результат factorial() и тем самым обеспечить корректный вывод при использовании echo $math;.

Ответ

Добавьте __toString(): string, возвращающий строковое представление factorial(). Тогда echo $math вызовет преобразование объекта; отрицательное число по-прежнему должно приводить к ошибке.

В существующий класс добавьте:

public function __toString(): string {
    return (string) $this->factorial();
}

Использование для современных PHP:

try {
    echo new Math(5);
} catch (Throwable $e) {
    echo $e->getMessage();
}

Вывод — 120. Для new Math(-5) исключение возникнет при преобразовании в строку. Проверку переполнения надо добавить в factorial отдельно: __toString не делает арифметику безопаснее.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее