Excepiton
Exception türkçe anlamı istisna olan kelimedir. İstisnalar php'de hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini sağlar
PHP 5 de başka dillerdeki gibi başkalık (exception) modeli vardır.
Bir başkalık atılır ya da yakalanır.
Her denemenin karşılığı olan en az bir yakalama bloğu vardır. Birden çok yakalama bloğu değişik başkalık sınıflarını yakalamak için kullanılabilir. Normal çalışma (Başkalığın deneme bloğundan hiçbiri fırlatılmamışsa ya da fırlatılana uygun yakalama bloğu yoksa) çalışmaya sıralamadaki son yakalama bloğunun peşinden devam eder. Başkalıklar bir yakalama bloğunda fırlatılır (ya da yine fırlatılır).
Bir başkalık atıldıığında, o deyimi izleyen kod çalıştırılmaz ve PHP ilk uyumlu bloğu bulmaya çalışır. Eğer bir başkalık yakalamazsa, PHP kritik hatası "UncaughtExceptşon ..." üretilir. Eğer tutacı set_expection_handler() ile tanımlanmışsa bu olmaz.
Başkalığa fırlatma (atlama) örneği
Yukarıdaki örneğin çıktısı:
0.2 Başkalık yakalandı: Sıfıra bölme.
Merhaba Dünya
Başlığı Geliştirme:
Kullanıcı tanımlı başkalık sınıfı hazır - Başkalık sınıflarını arattırmakla tanımlarnır.
Hazır başkalık sınıfı örneği
Eğer bir sınıf hazır-Başkalık sınıfını genişletirse ve yapıcıyı yeniden tanımlarsa, onun var olan tüm verileri doğru olarak atandığının bilinmesi için "parent::__construct()" çağırması önemle önerilir. nesne bir yazı dizisi gibi gösterildiğinde değiştirilmiş çıktı sağlamak için __toString() yöntemi atlanır.
Başkalık sınıfını geliştirme
Exception türkçe anlamı istisna olan kelimedir. İstisnalar PHP'de hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini sağlar.
Kaynak : Burak Taş
Bir başkalık atılır ya da yakalanır.
Her denemenin karşılığı olan en az bir yakalama bloğu vardır. Birden çok yakalama bloğu değişik başkalık sınıflarını yakalamak için kullanılabilir. Normal çalışma (Başkalığın deneme bloğundan hiçbiri fırlatılmamışsa ya da fırlatılana uygun yakalama bloğu yoksa) çalışmaya sıralamadaki son yakalama bloğunun peşinden devam eder. Başkalıklar bir yakalama bloğunda fırlatılır (ya da yine fırlatılır).
Bir başkalık atıldıığında, o deyimi izleyen kod çalıştırılmaz ve PHP ilk uyumlu bloğu bulmaya çalışır. Eğer bir başkalık yakalamazsa, PHP kritik hatası "UncaughtExceptşon ..." üretilir. Eğer tutacı set_expection_handler() ile tanımlanmışsa bu olmaz.
Başkalığa fırlatma (atlama) örneği
<?php
functioninverse($x) {
if (!$x) {
thrownewException('Sıfıra bölme.');
}
else return 1/$x;
}
try {
echoinverse(5) . "n";
echoinverse(0) . "n";
}
catch (Exception $e) {
echo 'Başkalık yakalandı: ', $e->getMessage(), "n";
}
// Çalışmaya devam
echo 'Merhaba Dünya';
?>
Yukarıdaki örneğin çıktısı:
0.2 Başkalık yakalandı: Sıfıra bölme.
Merhaba Dünya
Başlığı Geliştirme:
Kullanıcı tanımlı başkalık sınıfı hazır - Başkalık sınıflarını arattırmakla tanımlarnır.
Hazır başkalık sınıfı örneği
<?php
class Exception
{
protected $message = 'Belirsiz başkalık'; // başkalık mesajı
protected $code = 0; // kullanıcı tanımlı başkalık kodu
protected $file; // başkalığın kaynak kodu
protected $line; // başkalığın kaynak satırı
function __construct($message = null, $code = 0);
final function getMessage(); // başkalık mesajı
final function getCode(); // başkalık kodu
final function getFile(); // kaynak dosya adı
final function getLine(); // kaynak satırı
final function getTrace(); // backtrace() dizisi
final function getTraceAsString(); // taramanın kalıplı yazı dizisi
/* Overrideable */
function __toString(); // görüntülemek için kalıplı yazı dizisi
}
?>
Eğer bir sınıf hazır-Başkalık sınıfını genişletirse ve yapıcıyı yeniden tanımlarsa, onun var olan tüm verileri doğru olarak atandığının bilinmesi için "parent::__construct()" çağırması önemle önerilir. nesne bir yazı dizisi gibi gösterildiğinde değiştirilmiş çıktı sağlamak için __toString() yöntemi atlanır.
Başkalık sınıfını geliştirme
<?php
/**
* Kullanıcı tanımlı başkalık sınıfı
*/
class MyException extends Exception
{
// başkalığı yeniden tanımla öyle ki
// mesaj seçimli olmasın
public function __construct($message, $code = 0) {
// bazı kodlar
// herşeyin doğru atandığına emin olun
parent::__construct($message, $code);
}
// nesnenin kullanıcı yazı dizisi gösterimi
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}n";
}
public function customFunction() {
echo "Bu tür başkalık için kullanıcı işlevin";
}
}
/**
* Başkalığı denemek için bir sınıf yarat
*/
class TestException
{
public $var;
const THROW_NONE = 0;
const THROW_CUSTOM = 1;
const THROW_DEFAULT = 2;
function __construct($avalue = self::THROW_NONE) {
switch ($avalue) {
case self::THROW_CUSTOM:
// kullanıcı başkalığı fırlat
throw new MyException('1 geçersiz parametredir', 5);
break;
case self::THROW_DEFAULT:
// varsayılanı fırlat
throw new Exception('2 parametre olarak geçersizdir', 6);
break;
default:
// Başkalık yok, nesne yaratıldı
$this->var = $avalue;
break;
}
}
}
// Örnek 1
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (MyException $e) { // yakalanır
echo "Benim başkalığımı yakalaman", $e;
$e->customFunction();
} catch (Exception $e) { // Atlanır
echo "Varsayılan Başkalığı Yakalan", $e;
}
// işleme devam
var_dump($o);
echo "nn";
// Örnek 2
try {
$o = new TestException(TestException::THROW_DEFAULT);
} catch (MyException $e) { // Bu tür uymadı
echo "Benim başkalığımı yakalaman", $e;
$e->customFunction();
} catch (Exception $e) { // yakalanır
echo "Varsayılan Başkalığı Yakalan", $e;
}
// işleme devam
var_dump($o);
echo "nn";
// Örnek 3
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (Exception $e) { // yakalanır
echo "Varsayılan Başkalığı Yakalan", $e;
}
// işleme devam
var_dump($o);
echo "nn";
// Örnek 4
try {
$o = new TestException();
} catch (Exception $e) { // atlandı, ibaşkalık yok
echo "Varsayılan Başkalığı Yakalan", $e;
}
// işleme devam
var_dump($o);
echo "nn";
?>
Exception türkçe anlamı istisna olan kelimedir. İstisnalar PHP'de hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini sağlar.
Basit bir örnekle anlatılması gerekirse;
<?php
try
{
$kullanici_adi=$_POST['kullanici_adi'];
$sifre =$_POST['sifre'];
if($kullanici_adi !== "kullanıcıadim" and $sifre !== "sifrem")
{
throw new Exception("Lütfen yönetici adinizi ve parolanizi dogru giriniz.");
exit();
}
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
Bu örnekte kullanıcı adı ve parola kontrolü yapılıyor. Girilen kullanıcı adında ve parolada hata olup olmadığı kontrol ediliyor.
İstisna tetiklendiği anda şu aşamalar gerçekleşir;
-
Varolan kod durumu kaydedilir.
-
Kod işletimi önceden tanımladan hata ayıklama bloğuna atlayacaktır.
-
Duruma göre , hata ayıklama sonunda , ya en son işletilen kod bloğuna yeniden dönerek devam edecek, yada hata ayıklama bloğunda belirtilen aşamadan devam edecektir.
Exception Sınıfının Metotları
getCode() | Kodu yapılandırıcıya geçirildiği şekliyle döndürür. |
getMessage() | Mesajı yapılandırıcıya geçirildiği şekliyle döndürür. |
getFile() | İstisnanın fırlatıldığı kod dosyasına giden tam yolu döndürür. |
getTrace() | İstisnanın fırlatıldığı backtrace’i içeren bir dizi döndürür. |
getTraceAsString() | getTrace ile aynı bilgileri karakter katarı olarak döndürür. |
toString() | Yukarıdaki metotlardan alınan bütün bilgileri veren bir exception nesnesinin özelliklerini yansıtmanızı sağlar.Mesajınızın şeklini şemalini düzeltmenize yarar. |
backtrace | İstisna fırlatıldığı zaman hangi fonksiyonların çalışmakta olduğunu gösterir. |
Kaynak : Burak Taş
Yorumunuzu Ekleyin