By Hüseyin Bora
PHP de kodlarken yapılan kolaylıklardan yararlanmama hatalarından biride requesten gelen parametrelere göre uzayan switch case ve else if yapılarıdır.
Bunu pek çok php betiğinde görürsünüz hatta en sık yapılardan biridir.
Temel amaç $_REQUEST[“page”] gibi bir veriye göre işlemi belirlemektir.
Çoğu PHP’ci bu işlemi şöyle yapar.
$param = $_REQUEST[“param”];
switch ($param) {
case “ekle”:
ekle()
break;
case “sil”:
sil()
break;
case “duzenle”:
duzenle();
break;
default:
listele();
}
Bu switch işlem yapılabilecek parametre sayısına göre uzar gider çoğu zaman benzer şekilde üç case ile bitmez. Bu yaklaşımın diğer bir olumsuz yönü de betiğe yeni bir özellik eklendiğinde switch ifadesine yeni bir case in eklenmesi gerektiğidir.
call_user_func bir fonksiyonu call_user_method ise bir sınıfın üye metodunu işletir.
Örneğin ekle,duzenle,sil,listele metotlarının Kayıt sınıfı içerisinde olduğunu varsayalım.
$param = $_REQUEST[“param”];
$kayıt = new Kayıt();
if(method_exists($kayıt,$param))
call_user_method($param, $kayıt)
else
call_user_method(“liste”, $kayıt)
Örnektende anlaşılacağı gibi switch case ifadeleri ile onlarca uzayan giden satırlarla karşılık örnekteki kullanım daha verimlidir. Bu sayede yeni bir işlem eklendiğinde de switch case ifadesindeki gibi bir düzenleme yapmaya ihtiyaçda duyulmaz.
By Hüseyin Bora
Bu makalede PHP de edindiğim bazı kolaylık ve deneyimleri aktarmaya çalışacağım
Profesyonel PHP programcılarının çoğu farklı bir dil üzerinde çalışıp PHP ye geçmiş kişiler olarak nitelendirdiğimizde örneğin Java, C# olabilir PHP yine de bu diller gibi düşünmeye başlar hâlbuki PHP tam anlamıyla bir betik dilidir ve benzer neyse yönelimli dillerden ayıran belirgin özellikleri vardır.
Ben ve çalışma arkadaşlarımın PHP üzerinde nesne yönelimli projeler geliştirirken ilk başlardaki PHP üzerindeki acemiliğimizden dolayı bir takım kodları Java da ya C# da yazarcasına geliştirmişiz. Bu günde pek çok PHP programcısının benzer hatalara düştüğünü görüyorum.
PHP’nin NYP yapısı diğer NYP dillerden ayrılan ve programcının işini kolaylaştıran bir yapıya sahip.
Örneğin NYP temellerinden Kılıflama(Encapsulation) bu prensip Java da Set ve Get metotları C# da ise set ve get propertyleri yazılarak gerçekleştirilir. PHP de de Set ve Get yaklaşımı kabul edilebilirse de bu konuda PHP de __get ___set isimlerinde iki sihirli metot tanımlanmıştır. Örneğin bir sınıfın içerisinde 5 adet private üye olsun Get ve Set metotlarını kullanmak istersek sadece Get ve Set için sınıfımız da 10 adet metot bulunması gerekir. PHP nin sihirli metotları ile bu iş basit 2 metot içerisinde halledilebilir.
Örnek
Class urun
{
private $id,$name,$prince,$paytyep,$order;
public function __set($n,$v)
{
$this->$n=$v;
}
public function __get($n)
{
return $this->$n;
}
}
Örnekte de görülebileceği gibi 10 metot ile yapılacak bu iş iki sihirli metot sayesinde basit ve sistem kaynaklarını daha verimli kullanır bir şekilde tasarlanmıştır.