@AdamDickins

Как правильно отловить исключение в assert PHP?

Из документации PHP

https://www.php.net/manual/ru/function.assert.php

Пример #4 Ожидания с собственным исключением
<?php
class CustomError extends AssertionError {}

assert(true == false, new CustomError('True не является false!'));
echo 'Привет!';
?>


хочу дополнить класс CustomError

class CustomError extends AssertionError {
    
    public function setLog() {}
}

Но у меня не получается вызвать метод setLog() если assert терпит неудачу

Если я сделаю

class CustomError extends AssertionError {
    
    public function  __construct() {
        $this-> setLog();
    }


    public function setLog() {}
}


То конструктор вызывает вне зависимости будет ли assert true или false

assert(true, new CustomError('True не является false!')); -- Вызовет конструтор хотя assert true


Получает что assert независимо от утверждения будет инициализировать класс CustomError
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 1
bitniks
@bitniks
Go/PHP/Symfony developer
__construct() вызывается при создании объекта класса, то есть на new CustomError()

Можно сделать так:
try {
    assert(true == false, new CustomError('True не является false!'));
} catch (CustomError $e) {
    $e->setLog();
    throw $e;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы