0Pricing
PHP Academy · Ders

Özel İstisnalar Oluşturma

Etki alanına özgü hata türleri oluşturmak için Exception sınıfını genişletin.

Özel İstisnalar Oluşturma, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.

Neden Özel İstisnalar?

Özel istisnalar şunları yapmanızı sağlar:

  • Uygulamanızdaki hataları genel PHP hatalarından ayırma
  • Alana özgü verileri taşıma (sipariş ID'si, kullanıcı ID'si vb.)
  • Farklı katmanlarda belirli hata türlerini yakalama
  • Anlamlı ve kendini açıklayan hata hiyerarşileri oluşturma

Exception Sınıfını Genişletme

Exception temel sınıfını genişleterek özel bir istisna oluşturun:

<?php
class ValidationException extends \Exception
{
    private array $errors;

    public function __construct(array $errors, string $message = '', int $code = 0)
    {
        $this->errors = $errors;
        parent::__construct($message ?: implode(', ', $errors), $code);
    }

    public function getErrors(): array
    {
        return $this->errors;
    }
}

Özel İstisna Kullanma

Özel istisnanızı fırlatın ve yakalayın:

<?php
function createUser(array $data): void {
    $errors = [];
    if (empty($data['email'])) $errors[] = 'Email required';
    if (empty($data['name']))  $errors[] = 'Name required';

    if ($errors) {
        throw new ValidationException($errors);
    }
    // save user...
}

try {
    createUser([]);
} catch (ValidationException $e) {
    foreach ($e->getErrors() as $err) {
        echo '- ' . $err . PHP_EOL;
    }
}

İstisna Hiyerarşisi Tasarımı

Alanınız için bir hiyerarşi tasarlayın:

<?php
// Base exception for your app
class AppException extends \RuntimeException {}

// Domain-specific exceptions
class NotFoundException extends AppException {}
class AuthException extends AppException {}
class PaymentException extends AppException {}

// Specific payment errors
class InsufficientFundsException extends PaymentException {
    public function __construct(public readonly float $balance, public readonly float $required) {
        parent::__construct("Insufficient funds: have $balance, need $required");
    }
}

Hiyerarşiye Göre Yakalama

Türetilmiş tüm istisnaları işlemek için bir temel sınıfı yakalayın:

<?php
try {
    processPayment($order);
} catch (InsufficientFundsException $e) {
    echo 'Low balance: need ' . $e->required;
} catch (PaymentException $e) {
    echo 'Payment failed: ' . $e->getMessage();
} catch (AppException $e) {
    echo 'App error: ' . $e->getMessage();
} catch (\Throwable $e) {
    // Last resort
    error_log($e);
}

İstisnalara Bağlam Ekleme

Hata ayıklamayı kolaylaştırmak için istisnaları ek verilerle zenginleştirin:

<?php
class HttpException extends \RuntimeException
{
    public function __construct(
        private int    $statusCode,
        string         $message = '',
        ?\Throwable    $previous = null
    ) {
        parent::__construct($message, $statusCode, $previous);
    }

    public function getStatusCode(): int
    {
        return $this->statusCode;
    }
}

HTTP İstisnası Örneği

Bir web uygulamasında HTTP istisnasını kullanma:

<?php
try {
    $user = findUserById($id);
    if (!$user) throw new HttpException(404, 'User not found');
    if (!$user->canAccess($resource)) {
        throw new HttpException(403, 'Access denied');
    }
} catch (HttpException $e) {
    http_response_code($e->getStatusCode());
    echo json_encode(['error' => $e->getMessage()]);
}

Arayüz Tabanlı İstisnalar

İlişkisiz istisna sınıflarını gruplamak için arayüzleri kullanın:

<?php
interface UserFacingException
{
    public function getUserMessage(): string;
}

class ValidationException extends \Exception implements UserFacingException
{
    public function getUserMessage(): string
    {
        return 'Please check your input: ' . $this->getMessage();
    }
}

// In controller:
catch (UserFacingException $e) {
    echo $e->getUserMessage();
}

Adlandırılmış Yapıcı Deseni

Yaygın istisna senaryoları için statik fabrika yöntemlerini kullanın:

<?php
class OrderException extends \RuntimeException
{
    public static function notFound(int $id): self
    {
        return new self("Order #$id not found", 404);
    }

    public static function alreadyShipped(int $id): self
    {
        return new self("Order #$id already shipped", 409);
    }
}

throw OrderException::notFound($orderId);

İstisnaları Serileştirme

Günlük kaydı veya API yanıtları için istisna verilerini bir diziye dönüştürün:

<?php
function exceptionToArray(\Throwable $e): array {
    return [
        'type'    => get_class($e),
        'message' => $e->getMessage(),
        'code'    => $e->getCode(),
        'file'    => $e->getFile(),
        'line'    => $e->getLine(),
        'trace'   => $e->getTraceAsString(),
        'previous' => $e->getPrevious()
            ? exceptionToArray($e->getPrevious())
            : null,
    ];
}

Özel İstisnalar için En İyi Uygulamalar

Özel istisnaları tasarlamaya yönelik yönergeler:

  • Beklenmeyen durumlar için RuntimeException sınıfını genişletin
  • Programcı hataları (geçersiz bağımsız değişkenler) için LogicException sınıfını genişletin
  • Olası her ileti için bir istisna sınıfı oluşturmayın — bunun yerine kodları kullanın
  • İstisna sınıfı adlarını PascalCase biçiminde tutun ve Exception ile bitirin
  • Her yöntemin hangi istisnaları fırlatabileceğini belgeleyin

Hızlı Kontrol

Kodunuzdaki mantık hatasını temsil eden özel bir istisna oluşturmak için hangi PHP temel sınıfını genişletmelisiniz?

Özet: Özel İstisnalar

Özel istisnaların özeti:

  • Exception sınıfını veya bir alt sınıfını genişletin
  • Alana özgü özellikler ve yöntemler ekleyin
  • Hiyerarşiler tasarlayın — tüm alt sınıfları yakalamak için üst sınıfı yakalayın
  • İlişkisiz istisnaları gruplamak için arayüzleri kullanın
  • Açıklık için statik adlandırılmış yapıcılar kullanın
  • Her zaman parent::__construct() çağrısını yapın

Sıkça Sorulan Sorular

“Özel İstisnalar Oluşturma” dersi ücretsiz mi?

Evet — “Özel İstisnalar Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.

“Özel İstisnalar Oluşturma” dersinde ne öğreneceğim?

Etki alanına özgü hata türleri oluşturmak için Exception sınıfını genişletin. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

PHP Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Özel İstisnalar Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. PHP Hata Türleri ve Raporlama
  2. Try, Catch ve Finally
  3. Özel İstisnalar Oluşturma
  4. Hataları Günlüğe Kaydetme ve En İyi Uygulamalar
← PHP Academy Sayfasına Dön