Php etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Php etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

1 Şubat 2008 Cuma

Php 5 Yeni Hata Yakalama Sınıfı(Exception)-2

Yerleşik Exception sınıfı ve üzerine inşa ettiğimiz yeni sınıf

Php ile gelen yerleşik exception sınıfı
(Bu kod http://www.php.net/ adresinden alınmıştır.)

class Exception
{
protected $message = 'Unknown exception';
protected $code = 0;
protected $file;
protected $line;

function __construct($message = null, $code = 0);
final function getMessage();
final function getCode();
final function getFile();
final function getLine();
final function getTrace();
final function getTraceAsString();
function __toString();
}
?>

Gördüğünüz gibi daha önceki yazımızda söylediğimiz metotları içeren bir sınıf.Burda en çok dikkat çeken şey __toString() metodu hariç diğer metotların başına final anahtar sözcüğü gelmiş bu anahtar sözcük bu metotların hiç bir şekilde başka sınıflar tarafından kullanılamıyacağını üzerinde bir düzenleme yapılamayacağını gösterir. Yani bu metotlar kalıtım yoluyla başka alt sınıflara devredilemez.

(final anahtar kelimesini kendi sınıflarınızın hangi elemanının alt sınıflar tarafından erişilmesini engellemek istiyosanız kullanabilirsiniz,bu anahtar kelimeyi sınıflarınızın başına koyarakta yazdığınız sınıfın başka bir alt sınıfta kullanılmasını engelleyebilirsiniz.)

__toString metodu ise final anahtar kelimesini içermediği için alt sınıflar tarafından erişilebilir ve düzenlenebilir.Bununla ilgili hemen bir örnek yapalım;

class benimsinifim extends Exception
{
function __toString()
{
return 'buraya bir link yazabilirsiniz veya istediğiniz bir Html koduda olabilir';
Bildirmek için tıklayınız';
}
}
try
{
throw new benimsinifim("Hata!!!");
}
catch(benimsinifim $m)
{
echo $m->getMessage();
echo $m;
}
?>
Bu yaptığımız sınıfla __toString metoduna erişip onu Exception sınıfında devre dışı bırakıyoruz ve benimsinifim sınıfında yeniden oluşturuyoruz ve Geri bildirim yapmak için bir link sunuyoruz.

Kendi exception sınıfınızı tanımlamak için genellikle php’de yerleşik olan exception sınıfının üzerine inşa ettiğiniz sınıfları kullanırsanız özellikle başlangıç aşamasında size daha faydalı kodlar yazmanızda yardımcı olur.

Şimdi yerleşik exception sınıfının metotlarını daha yakından inceleyelim;

getMessage()

Daha önce verdiğimiz örneklerdende anlaşılacağı üzere;

throw new Exception(‘Hata mesajımız’);

şeklinde fırlattığımız hata mesajını yakalayıp(catch blogu içinde) ekrana basılmasını sağlamamıza yarar.

catch(Exception $m)
{
echo $m->getMessage();
}

getCode()

Bu özellikte hata mesajımıza bir hata kodu vermemize yarar.

throw new Exception (‘Hata mesajımız’,1);

Burada da hata mesajımızdan sonra fırlatılacak hata mesajının yanında fırlatılacak hata kodunu gireriz. Ve bunu catch blogu içinde kullanırız.

catch(Exception $m)
{
echo $m->getMessage()
}

getFile()

Bu metot da hatanın olduğu dosyanın tam adresini döndürür. Yine aynı şekilde kullanılır.

getTrace()

Bu metotda hata verilen sayfayı ve hata sırasında hangi fonksiyonların çalıştığını size dizi halinde verir.

function a()
{
throw new benimsinifim("Hata!!!");
}
try
{

a();
}

catch(benimsinifim $m)
{
print_r( $m->getTrace());
}

Şeklinde bir kodunuz varsa bu metot sayesinde size şöyle bir çıktı verilecektir.
Array ( [0] =>
Array ( [file] => C:\wamp\www\projects\trying\nesneyonelik\hatayakalamasinifi.php
[line] => 22
[function] => a
[args] => Array ( ) ) )

getTraceAsString()

Bu metotda getTrace() metoduyla aynı bilgileri bir karakter katarı olarak verir.

catch(benimsinifim $m)
{
echo $m->getTraceAsString();
}

Çıktısıda şu şekilde olur.
#0 C:\wamp\www\projects\trying\nesneyonelik\hatayakalamasinifi.php(22): a() #1 {main}

__toString()

Bu metodu yukarıda açıklamıştık ve kullanımınıda göstermiştik şu şekilde de kullanabilirsiniz.

catch(benimsinifim $m)
{
echo $m->getTraceAsString();
echo $m->__toString();
}
Size yine aynı sonucu vericektir.

31 Ocak 2008 Perşembe

Php 5 Yeni Hata Yakalama Sınıfı (Exception)

İstisnalar Php 5’te yeni bir özelliktir. İstisnalar hata yönetimini kolay, genişletilebilir, bakımı yapılabilir ve nesne yönelimli bir şekilde gerçekleştirilmesini mümkün kılan bir yönetimdir.

İstisnalar nasıl kullanılır?
Normalde kodlarımızdaki hataları genellikle if-else komutlarını kullanarak kontrol ediyorduk.Örneğin kullanıcı e-mail adresini girmediyse karşısına “Lütfen email adresinizi giriniz” şeklinde bir mesaj yolluyorduk. Bunu da genellikle formdan gelen verileri if-else kullanarak yapıyorduk. Php 5 geliştirilirken bunun üzerinde düşünmüşler ve biraz daha değişik bir yöntem belirlemişler.İşte biz bu makalemizde bunu inceleyeceğiz nasıl olur, nasıl kullanılır bakacağız.
İstisna Yöntemi
try
{
//Uygulamanızdaki kodlar buraya
}

Yukarıda gördüğünüz gibi uygulamanızdaki kodları try blogu içine yazarak istisna yöntemini kullanmaya başlayabilirsiniz. Bu blok arasına yazdığız kodlarda bir hata meydana gelirse, istisna fırlatma denilen işlemin uygulanmasını başlatılır.
İstisna Fırlatalım
throw new Wxception(‘Mesaj’,code);

throw anahtar sözcüğü ile istisna yönetimi mekanizmasını tetikleyebilirsiniz. Bu anahtar sözcük bir nesne almayı bekler.En basit durumda Php5 teki yerleşik Exception sınıfının bir örneğini oluşturabilirsiniz.

Bu sınıfa ait yapılandırıcı iki parametre alır, Bir mesaj ve bir kod.Bunlar bir hata mesajını ve bir hata kod numarasını temsil eder.

Try bloğunun altında bir tanede catch bloğu vardır. Buda fırlatılan istisnaların yakalanmasını sağlar.

catch ( typehint exception )
{
//İstisnayı yönet
}

Tek bir try bloğuyla ilişkilendirilen birden fazla catch bloğu olabilir. Fakat her bir catch bloğu farklı tipte bir istisna yakalayacaksa, birden fazla try blogu kullanmak daha mantıklıdır

Örneğin, eğer Exception sınıfının istisnalarını yakalamak isterseniz catch bloğunuz şu şekle olabilir.
catch (Exception $e)
{
//İstisnayı yönet
}

catch bloğuna geçirilen (ve bu blok tarafından yakalanan) nesne, istisnayı gönderen throw ifadesine geçirilen (ve bu deyim tarafından fırlatılan) nesnedir. İstisna herhangi bir tipte olabilir, ama Exception sınıfının örneklerini ya da kendi kullanıcı tanımlı istisnalarınızın örneklerini(özelliklerini Exception sınıfından kalıtım yoluyla alan örnekler) kullanmanız iyi olur.

Bir istisna fırlatıldığında, php bununla eşleşen bir catch bloğu arar. Eğer birden fazla catch bloğu kullanıyorsanız, bunların her birine geçirilen nesneler farklı tiplerde olacak ve böylece php hangi catch bloğunun kullanılması gerektiğini anlar.Ayrıca bir catch bloğu içindede istisnalar fırlatabilirsiniz.

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.)

Aşağıda formdan gelen kullanici adi ve şifreyi denetleyen istisna yöntemi kullanılmış bir kod var incelemenizde fayda var.

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();
}

?>

Not: Bir dahaki yazımızda kendi exception sınıfımızı oluşturmaya çalışacağız.

25 Ocak 2008 Cuma

Zend Sertifika Programı

Bu günlerde bir merak sardı beni herkes bir sertifika alıp duruyor.Bende merak ettim php'nin de bir sertifikası var mı diye? Sonunda buldum varmıs ama bayağı bir kasmak gerekiyor almak için varsın olsun kasalım tabi birazda para. Sınavda 70 tane soru soruyorlar 90 dakikada zamanınız var yani rahat rahat yetiştirilebilir :) Türkiye'de bu sertifikaya sahip en son 8 kişi vardı. Tüm dünya tarafından kabul edilen bir sertifika programı katılmakta yarar var.
Örnek sorulara aşağıdaki linkten ulaşabilirsiniz;
http://www.zend.com/store/education/certification/self-test.php?begin=1
Türkiye'de de bazı siteler konunun üstüne ciddi bir şekilde eğilmişler videolu ders ayarlayacaklarmış;
http://javam.org/javamorgtan-zend-sertifikasi-icin-videolu-dersler/
Son olarakta gmailde bir grup kurmuslar sizleride bekleriz.
http://groups.google.com/group/zendturkiye
Örnek sorularda başarılar benim için çok güzel geçmedi sizde kendinizi bir deneyin bence.
Türkiye'den zend sertifikasına sahip olanlarıda aşağıdaki linkten görebilirsiniz.

19 Ocak 2008 Cumartesi

Nesne Yönelimli Programlama ve Php-3




İki sınıfın beraber kullanılması ve kalıtım;

Php’de en fazla iki sınıf beraber çalışabilir, bu cümle biraz yanlış oldu ama biraz daha açıklamaya çalışırsak her sınıfın sadece bir ebeveyn (parent)’i vardır, yani her sınıf bir tane sınıf kapsayabilir. Bunları bir de şekil üzerinde göstermeye çalışalım.

Php (1) ve (2) yi destekler fakat (3)’ ü desteklemez. Anlaşılmıştır umarım şimdi bir örnek yapalım bu iş için “extends” anahtar kelimesini kullanacağız.


class A
{
var $deger1;
function arababoya1()
{

}
}

?>


class B extends A
{
var $deger2;
function arababoya2()
{
}
}

?>

Görüldüğü üzere “extends” anahtar kelimesini kullanarak iki sınıfı beraberce kullanabiliriz, bu şekilde yine yazdığımız temel bir sınıfı bu şekilde daha özelleştirilmiş işlerde kullanmak için başka bir sınıfın içinde kullanabiliriz. Yukarıdaki kodu nasıl kullanacağımıza bakalım.




$b = new b();
$b -> arababoya1();
$b -> deger1=10;
$b -> arababoya2()
$b-> deger2=20;


Bir b nesnesi tanımladık B sınıfına ait ve içinde A sınıfına ait metotlarıda kullandık bu şekilde programları iç içe sınıflar yardımıyla yapabiliriz. Bu yazdığımız kodları başka projelerde rahatça kullanmamıza fayda sağlar.

Private, Public ve Protected

Daha önceden php4 ve php5’in farklarını açıklarken daha sonra belirticeğiz demiştik sıra geldi bunlara.
Php5’te nitelik ve metotlara ulaşmak için üç değişik ulaşım geliştirilmiştir.
Bunlar;

public: Türkçesi halk, genel manasındadır, anlayacağınız üzere bu şekilde tanımlanan metotlar ve nitelikler her yerden ulaşılabilir.Sınıfın içinden veya dışından.
Aynı zamanda varsayılan olarak kullanılır, hiç bir şey yazılmadıysa public’tir

private: Türkçesi özel demektir, gerçekten özel bir erişimdir, bu şekilde tanımlanmış metot ve nitelikler sadece ve sadece sınıf içinden erişilebilir. Bunun için özellikle metotlarda kullanırken dikkatli olmak lazım.

protected: Türkçesi korunmalı demektir, bu public ve private’nin arasında bir yerdedir. Bu şekilde tanımlanmış metot ve nitelikler sınıfın içerisinden ve diğer alt sınıflar tarafından ulaşılabilir yani kalıtımla ulaşabiliriz.

Bu kelimeleri istediğiniz sınıflara, metotlara veya niteliklerin başına yazarak istediğiniz sınıflara erişilip erişilemeyeceğini veya nasıl erişilebileceğini belirtebiliriz.Hiç bir şey yazmazsak varsayılan olarak public ayarlıdır.


Yetki Kullanma (Overridding)

Elinizde iki tane sınıfınız var ve bunları iç içe bir şekilde kullanmak istiyorsunuz, fakat bu iki sınıfın içinde aynı adlara sahip fakat farklı işler yapan metotlar ve nitelikler var, bu durumda sizce php hangisini kullanır, neler olabilir, ortalık biraz karışabilir bunu önlemek için;

1)İlk ve uzun yol biraz uğraştırıcı, zor, zaman çalan ve kullanışsız bir yol çakışan metot ve niteliklerin adlarını değiştirerek bir çözüme gidebiliriz :).

2)İki sınıfımız var ve bunlar iç içe(yani biri diğerini içeriyorsa) ve bazı metot ve nitelikler aynı adlara sahipse hangi sınıf diğer sınıfı kapsıyorsa onun içindeki metot ve nitelikler ilk önce kullanılır.Fakat biz kapsayan değil de kapsanan sınıftaki metot ve nitelikleri kullanmak istiyorsak “kapsanansınıf::parent::metot” şeklinde kullanabiliriz.