Можно ли уничтожить создаваемый объект в конструкторе PHP? Или что делать если передаваемые аргументы не валидны

Создаем объект Circle с радиусом меньше или равно 0, то есть такой круг заведомо не может существовать. Можно ли такой объект уничтожить на стадии конструктора, например чтобы конструктор не создал объект по итогу, а вернул NULL? Ну или напишите как правильно обрабатывать подобные случаи.

class Circle
{
    private $radius;
    public function __construct(int $radius)
    {   
        if ($radius > 0) {
            $this->radius = $radius;
        } else {
            $this->radius = NULL;
        }
    }
}

Ответы (1 шт):

Автор решения: teran

Если аргументы вас не устраивают, и ситуация явно исключительная, логично выбросить какое-нить условное InvalidArgumentException. Обрабатывать данную ситуацию, конечно, должен вызывающий код.

Другим вариантом решения проблемы будет создание экземпляра класса через статический метод, сделав конструктор приватным, например, так:

class Circle {
    
    private $r = 0;

    private function __construct(int $r){
        $this->r = $r;
    }
    
    public static function new(int $r){
        if($r <= 0) return null;
        return new self($r);
    }
}


$x = Circle::new(10);
print_r($x);

Но в любом случае, вызывающий код должен выполнять либо работу по отлову исключений, либо проверки результата создания на null.

→ Ссылка