İçeriğe geç

PHP Assertions

Kod yazarken; hata yapmamız kadar doğal bir durum yoktur. Mükemmel bir sistem de yoktur. Her sistemin ya da yazılan her kod satırlarının bir yerlerinde mutlaka hatalı veya zayıf noktalar vardır.

Zaten insan elinin değdiği hangi şey mükemmel ki?

Önemli olan çıkan hataları düzeltmek ve daha da önemli olan şey ise; ilerde çıkabilecek olan hataların da önlemlerini almaktır.

Bu yazıda kısaca; assertion kavramına değinmek ve development sırasında, ilerde oluşabilecek olan hataların bir nebze de olsun önüne geçebilmeyi anlatmak istedim.

Development sırasında; assert() fonksiyonunu sıklıkla kullanıyorum. Fakat sadece development sırasında!

assert() fonksiyonu bana, gözden kaçabilecek olan hataların oluşumlarını gösterebiliyor. Aynı zaman da program akışını da değiştirebilme olanağı sağlıyor.

Peki bu işlemleri nasıl gerçekleştiriyorum?

Basit olarak; bir array’imiz olduğunu varsayalım.

$user = array(
    'name'    => 'Emre Can',
    'surname' => 'ÖZTAŞ',
    'city'    => 'ANKARA'
);

Normalde bu array’in array olup olmadığını aşağıdaki gibi kontrol edebiliriz, bildiğiniz gibi.

if (is_array($user)) {
    # code...
}

assert() fonksiyonu ile bu array’in bir array olup olmadığını kontrol edebilir ve array olmaması durumunda hata vermesini sağlayabilirim.

if (assert(is_array($user))) {
    # code...
}

Şimdilik çok mantıksız gelebilir, haklısınız. Zaten is_array() fonksiyonu bizim için array’i kontrol ediyordu.

Kodları değiştirip aşağıdaki gibi tekrar yazayım.

$name = 'emrecanoztas';

if (assert(is_array($name))) {
    # code...
}

Yukarıdaki satırlarımızın ekran çıktısı aşağıdaki gibi olacaktır.

Warning: assert(): assert(is_array($name)) failed

Görüldüğü gibi assert() fonksiyonu bana hemen uyarı verdi.

Buraya kadar assert() gereksiz gibi gözükebilir. Lakin yazımızın buradan sonrası ilginizi çekecektir, eminim.

assert() fonksiyonu herhangi bir seçenek kullanılmadan yani yukarıdaki gibi kullanılması durumunda sadece uyarı verir ve bırakır. Görüldüğü gibi bu da çok saçma bir olay!

assert_options() seçeneği ise; assert() sonucuna göre değişik işlemler yapmamı sağlar. Örneğin; programın akışını değiştirmek gibi…

assert_options() seçeneğinde belirtilebilecek olan değerler aşağıdaki gibidir.

ASSERT_ACTIVE  [true veya false]

Öntanımlı olarak; true değerindedir. assert() fonksiyonun çalışıp çalışmamasına karar verir.

ASSERT_WARNING [true veya false]

Öntanımlı olarak; true değerindedir. assert() fonksiyonunun uyarı verip vermemesini belirler.

ASSERT_BAIL [true veya false]

Öntanımlı olarak; false değerindedir. assert() fonksiyonu olumsuz sonuç verdiği zaman program akışını durdurur.

ASSERT_QUIET_EVAL [true veya false]

Öntanımlı olarak; false değerindedir. assert() fonksiyonu için hata raporlanıp raporlanmamasını belirler.

ASSERT_CALLBACK [callback]

Öntanımlı olarak; null değerindedir. assert() fonksiyonundan olumsuz bir sonuç gelmesi durumunda yapılacak olanları belirler. Örneğin; program akışını değiştirmek.

assert_options() seçeneğini de kodlarımız arasına ekleyelim ve kodlarımızı düzenleyelim.

Kodlarımızın son hali aşağıdaki gibi olacaktır.

<?php

assert_options(ASSERT_ACTIVE, true);
assert_options(ASSERT_WARNING, false);
assert_options(ASSERT_BAIL, true);
assert_options(ASSERT_CALLBACK, 'errorFunc');

$name = 'emrecanoztas';

function errorFunc()
{
    echo('Bir hata meydana geldi!');
}

function arrayTest($param)
{
    assert(is_array($param));
}

arrayTest($name);

echo('Program devam ediyor..!');

Yukarıdaki kodlarımızın ekran çıktısı da aşağıdaki gibi olacaktır.

Bir hata meydana geldi!

Görüldüğü gibi betik bir hata ile karşılaşınca; başka bir yere yönlendi ve program akışını sonlandırdı.

callback olarak; belirlediğimiz errorFunc() fonksiyonu bizim hata denetimini sağladığımız fonksiyon. ASSERT_BAIL’i false olarak belirlemiz durumunda program hem yönlenecekti hem de devam edecekti.

Bu ve buna benzer satırları; development sırasında debug işlemi için kullanabilirsiniz.

Lakin yazdığınız betikler canlıdayken assert() kullanmamaya özen göstermelisiniz.

Yalnızca; development sırasında, hata denetimi için kullanılmalıdır.

Saygı ve muhabbetle!..

Bu içeriği paylaşmak ister misiniz?

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Buradaki içeriklerin tümü kamu malıdır. Kullanılması ve paylaşılması özgürdür.