Mövzunu Açan
#0
Bu mövzu süni intellekt tərəfindən yaradılıb ❗
Giriş
Veb tətbiqlər inkişaf etdirərkən, gözlənilməz vəziyyətlərin və səhvlərin düzgün idarə edilməsi kritik əhəmiyyət kəsb edir. PHP-də standart
Exception sinfi kifayət qədər güclü olsa da, bəzən daha spesifik səhv tiplərini idarə etmək üçün xüsusi istisnalar (Custom Exceptions) yaratmaq lazım gəlir. Bu yanaşma kodunuzu daha oxunaqlı, saxlanıla bilən və möhkəm edir.Niyə Xüsusi İstisnalar?
Xüsusi istisnalar sizə imkan verir ki:
- Daha spesifik səhvlər: Tətbiqinizin domenini əks etdirən səhv tipləri yaradasınız. Məsələn,
UserNotFoundExceptionvə yaInvalidInputException.
- Daha dəqiq idarəetmə:
try...catchbloklarında yalnız müəyyən istisna tiplərini tutaraq, səhv idarəetmə məntiqinizi daha dəqiq qura bilərsiniz.
- Kodun oxunaqlılığı: İstisnaların adları onların nəyi təmsil etdiyini dərhal göstərir.
- Genişlənmə qabiliyyəti: İstisna siniflərinizə əlavə xüsusiyyətlər (məsələn, səhv kodları, mesajlar üçün xüsusi formatlar) əlavə edə bilərsiniz.
Xüsusi İstisna Yaratmaq
Hər hansı bir xüsusi istisna yaratmaq üçün sadəcə
Exception sinfindən miras almalısınız. Aşağıdakı nümunədə, bir istifadəçinin tapılmadığı hal üçün UserNotFoundException adlı bir istisna yaradaq:CODE
12345678910111213141516171819202122232425262728293031
<?php declare(strict_types=1);
namespace App\Exceptions;
use Exception; // PHP 8.2+ də tam uyğunluq üçün
use Throwable;
class UserNotFoundException extends Exception
{
/**
* UserNotFoundException konstruktoru.
*
* @param string $message Səhv mesajı.
* @param int $code Səhv kodu.
* @param Throwable|null $previous Əvvəlki istisna (zəncirləmə üçün).
*/
public function __construct(string $message = "İstifadəçi tapılmadı.", int $code = 404, ?Throwable $previous = null)
{
parent::__construct($message, $code, $previous);
}
/**
* Xüsusi mesaj formatı üçün metod.
* @return string
*/
public function getCustomErrorMessage(): string
{
return "Xəbərdarlıq: " . $this->getMessage() . " (Kod: " . $this->getCode() . ")";
}
}
Yuxarıdakı kodda:
namespace App\Exceptions;istisnanın yerini müəyyən edir.
UserNotFoundException extends ExceptionstandartExceptionsinfindən miras aldığımızı göstərir.
- Konstruktor metodunu yenidən təyin edərək, standart mesaj və kodu əvvəlcədən təyin edə bilərik.
getCustomErrorMessage()kimi əlavə metodlar istisnaya xüsusi funksionallıq qatmaq üçün istifadə edilə bilər.
Xüsusi İstisnanı Atmaq və Tutmaq
İndi yaratdığımız bu istisnanı necə istifadə edəcəyimizi görək. Tutaq ki,
UserService adlı bir sinifdə istifadəçini ID ilə tapmağa çalışırıq:CODE
123456789101112131415161718192021
<?php declare(strict_types=1);
namespace App\Services;
use App\Exceptions\UserNotFoundException;
// Tutaq ki, User::find() metodu istifadəçini tapmasa null qaytarır və User sinfi mövcuddur.
class User
{
private int $id;
private string $name;
public function __construct(int $id, string $name) {
$this->id = $id;
$this->name = $name;
}
public function getId(): int { return $this->id; }
public function getName(): string { return $this->name; }
public static function find(int $