interface Entities extends \Iterator
{
/**
* @return Entity[]
*/
public function list(): array;
/**
* @param Form $form - форма, которая выдает провалидированные данные
* @return Entity - Проблема которую нужно решить
*/
public function addFromInput(Form $form): Entity;
}
try{
//программа работает нормально
}
catch(Exception){
//тут должен вернуть сущность Entity
}
try {
// код
} catch (ICreateNewException $e) {
echo 'Сработало исключения создания: ', $e->getMessage(), "\n";
} catch (Exception $e) {
echo 'Поймано исключение: ', $e->getMessage(), "\n";
} finally {
echo "Это я выполню всё равно";
}
// это примерный код просто для визуального примера
function ($callback, $args,$default)
{
try {
$r = $callback($args);
// or call_user_func(array($callback, $args))
} catch (ICreateNewException $e) {
echo 'Сработало исключения создания: ', $e->getMessage(), "\n";
return new NullObj;
} catch (Exception $e) {
echo 'Поймано исключение: ', $e->getMessage(), "\n";
mail(config('mail.to'))
} finally {
return $default;
}
}
class Entity {
}
class EntityException extends \Exception {
private $entity;
public function getEntity() {
return $this->entity;
}
public static function create($entity, $message = 'Error', $code = 0)
{
$exception = new static($message, $code);
$exception->entity = $entity;
return $exception;
}
}
try {
throw EntityException::create( new Entity, 'Internal error' );
} catch(\EntityException $e) {
// Handle entity exceptions
echo $e->getMessage() . PHP_EOL;
var_dump($e->getEntity());
} catch(\Throwable $e) {
// Handle other exceptions
}