[ OK ]
rodmar@fedora: /var/log/blog/domina-las-excepciones-personalizadas-en-php-como-un-pro.md
rodmar@fedora:/var/log/blog$ cat ./domina-las-excepciones-personalizadas-en-php-como-un-pro.md
---
title: "Β‘Domina las Excepciones Personalizadas en PHP como un Pro! πŸš€"
date: Nov 25 2024
tags: ["php"]
description: "Cuando escribes cΓ³digo, los errores son inevitables, pero lo que realmente importa es cΓ³mo los manejas. En PHP, las excepciones personalizadas son una herram..."
---

Cuando escribes cΓ³digo, los errores son inevitables, pero lo que realmente importa es cΓ³mo los manejas. En PHP, las excepciones personalizadas son una herramienta poderosa para controlar y comunicar errores especΓ­ficos en tu aplicaciΓ³n. Hoy aprenderΓ‘s cΓ³mo usarlas y sacarles el mΓ‘ximo provecho.

ΒΏQuΓ© son las excepciones personalizadas?

Las excepciones personalizadas te permiten definir tus propios tipos de errores, aΓ±adiendo contexto y claridad al manejo de situaciones excepcionales. Son ΓΊtiles cuando necesitas diferenciar errores especΓ­ficos dentro de tu aplicaciΓ³n.

CΓ³mo crear una excepciΓ³n personalizada

Para crear una excepciΓ³n personalizada, simplemente extiende la clase base Exception.

Ejemplo:

class SinEnergiaException extends Exception {
    public function __construct(string $mensaje, int $energiaRestante) {
        $mensaje .= " EnergΓ­a restante: {$energiaRestante}.";
        parent::__construct($mensaje);
    }
}

AquΓ­ creamos una excepciΓ³n SinEnergiaException que aΓ±ade informaciΓ³n extra sobre la energΓ­a restante.

Lanzando una excepciΓ³n personalizada

Puedes usar throw para lanzar tu excepciΓ³n personalizada cuando ocurra un error especΓ­fico.

Ejemplo:

class Pokemon {
    private int $energia;

    public function __construct(int $energia) {
        $this->energia = $energia;
    }

    public function atacar(): string {
        if ($this->energia <= 0) {
            throw new SinEnergiaException("No puedes atacar", $this->energia);
        }
        $this->energia -= 10;
        return "Β‘Ataque realizado! EnergΓ­a restante: {$this->energia}";
    }
}

Si el PokΓ©mon no tiene suficiente energΓ­a, se lanza una SinEnergiaException.

Capturando excepciones personalizadas

Para manejar estas excepciones, usa un bloque try-catch.

Ejemplo:

$pikachu = new Pokemon(5);

try {
    echo $pikachu->atacar(); // Lanza excepciΓ³n
    echo $pikachu->atacar(); // Sin energΓ­a
} catch (SinEnergiaException $e) {
    echo "Error: " . $e->getMessage();
}

La salida serΓ­a:

Error: No puedes atacar. EnergΓ­a restante: 0.

Esto asegura que el programa no se detenga abruptamente y que puedas manejar el error de forma controlada.

JerarquΓ­a de excepciones: Β‘Captura lo que necesitas!

Puedes usar una jerarquΓ­a de excepciones para manejar diferentes tipos de errores.

Ejemplo:

class PokemonException extends Exception {}
class SinEnergiaException extends PokemonException {}
class AtaqueInvalidoException extends PokemonException {}

class Pokemon {
    private int $energia;

    public function __construct(int $energia) {
        $this->energia = $energia;
    }

    public function atacar(string $ataque): string {
        if ($this->energia <= 0) {
            throw new SinEnergiaException("No puedes atacar", $this->energia);
        }
        if ($ataque !== "Impactrueno") {
            throw new AtaqueInvalidoException("Ataque no reconocido: {$ataque}");
        }
        $this->energia -= 10;
        return "Β‘{$ataque} realizado! EnergΓ­a restante: {$this->energia}";
    }
}

try {
    $pikachu = new Pokemon(10);
    echo $pikachu->atacar("Llamarada"); // Lanza AtaqueInvalidoException
} catch (AtaqueInvalidoException $e) {
    echo "Error de ataque: " . $e->getMessage();
} catch (SinEnergiaException $e) {
    echo "Error de energΓ­a: " . $e->getMessage();
} catch (PokemonException $e) {
    echo "Error general: " . $e->getMessage();
}

Esto organiza los errores en niveles, permitiendo capturar y manejar excepciones especΓ­ficas o generales segΓΊn sea necesario.

Buenas prΓ‘cticas para excepciones personalizadas

  • No abuses de las excepciones para errores triviales.
  • Proporciona informaciΓ³n adicional en el mensaje de la excepciΓ³n.
  • Explica en la documentaciΓ³n de tu cΓ³digo cuΓ‘ndo y por quΓ© se lanza cada excepciΓ³n.
  • Si algo no es un Exception, no lo lances.
rodmar@fedora:/var/log/blog$
cd ~
(Return Home)
[rodmar]
0:bash- 1:battles-
00:00:00
[ Press ESC or Click anywhere to close ]