Try, Catch ve Finally
try/catch/finally bloklarıyla çalışma zamanı istisnalarını düzgün biçimde yönetin.
Try, Catch ve Finally, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 2. 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.
İstisnalar ve Hatalar
PHP, sorunları bildirmek için iki yol sunar:
- Hatalar — geleneksel PHP bildirimleri, uyarıları ve ölümcül hataları (önceki derste ele alındı)
- İstisnalar — olağan dışı bir durum gerçekleştiğinde fırlatılan nesneler; try/catch ile yakalanır
İstisnalar, kurtarılabilir hataları ele almak için modern ve tercih edilen yaklaşımdır.
İstisna Fırlatma
Bir şeylerin ters gittiğini bildirmek için throw kullanın:
<?php
function divide(float $a, float $b): float {
if ($b == 0) {
throw new InvalidArgumentException('Cannot divide by zero');
}
return $a / $b;
}
echo divide(10, 2); // 5
// divide(10, 0); // throws exceptiontry / catch Bloğu
Fırlatma olasılığı bulunan kodu try içine alın ve istisnaları catch içinde işleyin:
<?php
try {
$result = divide(10, 0);
echo $result;
} catch (InvalidArgumentException $e) {
echo 'Error: ' . $e->getMessage();
echo ' in ' . $e->getFile() . ':' . $e->getLine();
}Birden Çok catch Bloğu
Farklı istisna türlerini ayrı catch bloklarında yakalayın:
<?php
try {
$pdo = new PDO($dsn, $user, $pass);
$result = performQuery($pdo);
} catch (PDOException $e) {
error_log('DB error: ' . $e->getMessage());
echo 'Database unavailable';
} catch (RuntimeException $e) {
echo 'Runtime error: ' . $e->getMessage();
} catch (\Throwable $e) {
echo 'Unexpected error: ' . $e->getMessage();
}finally Bloğu
finally, bir istisna fırlatılmış olsun ya da olmasın çalışır — temizleme işlemleri için idealdir:
<?php
$connection = null;
try {
$connection = openDatabaseConnection();
$data = fetchData($connection);
} catch (DatabaseException $e) {
error_log($e->getMessage());
echo 'DB error';
} finally {
// Always runs — even if exception was thrown
if ($connection) {
closeConnection($connection);
}
}İstisna Hiyerarşisi
PHP'nin istisna sınıfı hiyerarşisi:
Throwable(arayüz)- ├─
Error— PHP altyapısının hataları (TypeError, ParseError…) - └─
Exception— uygulama istisnaları - ├─
RuntimeException - ├─
InvalidArgumentException - ├─
LogicException - └─
PDOException
Throwable Yakalama
Throwable ile hem istisnaları hem de PHP hatalarını yakalayın:
<?php
try {
$result = someFunction();
} catch (\Exception $e) {
echo 'Exception: ' . $e->getMessage();
} catch (\Error $e) {
echo 'PHP Error: ' . $e->getMessage();
}
// Or catch both at once:
try {
// ...
} catch (\Throwable $e) {
echo get_class($e) . ': ' . $e->getMessage();
}Birleşimli catch (PHP 8)
PHP 8, tek bir catch bloğunda birden çok istisna türünün yakalanmasına izin verir:
<?php
try {
processRequest();
} catch (InvalidArgumentException | RuntimeException $e) {
echo 'Handled: ' . $e->getMessage();
}
// Compare PHP 7 approach:
// catch (InvalidArgumentException $e) { ... }
// catch (RuntimeException $e) { ... }İstisnaları Yeniden Fırlatma
Bir istisnayı çağrı yığını boyunca üst katmanlara taşımak için yakalayın, günlüğe kaydedin ve yeniden fırlatın:
<?php
function processOrder(int $id): void {
try {
$order = loadOrder($id);
$order->process();
} catch (PaymentException $e) {
error_log('Payment failed for order ' . $id . ': ' . $e->getMessage());
throw $e; // re-throw after logging
}
}İstisna Zincirleme
Bağlamı korumak için özgün istisnayı ‘önceki’ olarak aktarın:
<?php
try {
$data = fetchFromAPI();
} catch (NetworkException $e) {
throw new ServiceUnavailableException(
'Cannot reach upstream service',
0,
$e // $previous — preserves original cause
);
}
// Retrieve original:
// $e->getPrevious()set_exception_handler
Yakalanmamış istisnalar için genel bir işleyici kaydedin:
<?php
set_exception_handler(function(\Throwable $e): void {
error_log(sprintf(
'[UNCAUGHT] %s: %s in %s:%d',
get_class($e),
$e->getMessage(),
$e->getFile(),
$e->getLine()
));
http_response_code(500);
echo 'An unexpected error occurred. Please try again.';
exit(1);
});Hızlı Kontrol
try/catch/finally yapısında, bir istisna fırlatılmış olsun ya da olmasın hangi bloğun çalışacağı garanti edilir?
Özet: try/catch/finally
İstisna işleme özeti:
throw new ExceptionClass()ile istisnalar fırlatıncatch (Type $e)ile yakalayın- Farklı türler için birden çok catch bloğu kullanın
finallyher zaman çalışır — temizleme işlemleri için kullanın- PHP 8 birleşimli catch:
catch (A | B $e) - Çağrı yığını bağlamını korumak için yeniden fırlatın
Sıkça Sorulan Sorular
“Try, Catch ve Finally” dersi ücretsiz mi?
Evet — “Try, Catch ve Finally” 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.
“Try, Catch ve Finally” dersinde ne öğreneceğim?
try/catch/finally bloklarıyla çalışma zamanı istisnalarını düzgün biçimde yönetin. 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 2. dersidir.
“Try, Catch ve Finally” 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
- PHP Hata Türleri ve Raporlama
- Try, Catch ve Finally
- Özel İstisnalar Oluşturma
- Hataları Günlüğe Kaydetme ve En İyi Uygulamalar