Можно ли уничтожить создаваемый объект в конструкторе PHP? Или что делать если передаваемые аргументы не валидны
Создаем объект Circle с радиусом меньше или равно 0, то есть такой круг заведомо не может существовать. Можно ли такой объект уничтожить на стадии конструктора, например чтобы конструктор не создал объект по итогу, а вернул NULL? Ну или напишите как правильно обрабатывать подобные случаи.
class Circle
{
private $radius;
public function __construct(int $radius)
{
if ($radius > 0) {
$this->radius = $radius;
} else {
$this->radius = NULL;
}
}
}
Ответы (1 шт):
Если аргументы вас не устраивают, и ситуация явно исключительная, логично выбросить какое-нить условное 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.