. */ namespace SP\Core\Exceptions; use Exception; defined('APP_ROOT') || die(); /** * Extender la clase Exception para mostrar ayuda en los mensajes */ class SPException extends Exception { public const CRITICAL = 1; public const WARNING = 2; public const ERROR = 3; public const INFO = 4; protected int $type; protected ?string $hint; /** * SPException constructor. * * @param string $message * @param int $type * @param string|null $hint * @param int $code * @param Exception|null $previous */ public function __construct( string $message, int $type = self::ERROR, ?string $hint = null, int $code = 0, Exception $previous = null ) { $this->type = $type; $this->hint = $hint; parent::__construct($message, $code, $previous); } public static function error( string $message, ?string $hint = null, int $code = 0, Exception $previous = null ): static { return new static($message, SPException::ERROR, $hint, $code, $previous); } public static function critical( string $message, ?string $hint = null, int $code = 0, Exception $previous = null ): static { return new static($message, SPException::CRITICAL, $hint, $code, $previous); } public static function warning( string $message, ?string $hint = null, int $code = 0, Exception $previous = null ): static { return new static($message, SPException::WARNING, $hint, $code, $previous); } public static function info( string $message, ?string $hint = null, int $code = 0, Exception $previous = null ): static { return new static($message, SPException::INFO, $hint, $code, $previous); } /** * @return string */ public function __toString(): string { return sprintf('%s: [%s]: %s (%s)', __CLASS__, $this->code, $this->message, $this->hint); } public function getHint(): ?string { return $this->hint; } /** * @return int|string */ public function getType(): int|string { return $this->type; } }