Kas

18

Sihirli PHP call_user_func ve call_user_method

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.

Kas

4

Bubble Sort (Bora Usulu Bubble Sort )En Kısa Sıralama Algoritması

By Hüseyin Bora

C/C++ Balon Sıralama Bubble Sort

Amaç

Sırasız, karışık tek boyutlu bir tam sayı dizisini, küçükten büyüğe doğru sıralamak.

void sort(int *Array,int n)
{
for(int i=n-1 ;i>2;i–)
for(int j=0;j<i;j++)
(Array[j]>Array[i])?Array[j]^=Array[i]^=Array[j]^=Array[i]:0;
}

Tabiki kısa olması hızlı olması anlamına gelmiyor. Yinede Quick Sort hızlı çalışacaktır..

Kas

4

Sınıf Kilitlemesi Sınıflar Arası Döngüler

By Hüseyin Bora

Sınıf Kilitlemesi Sınıflar Arası Döngüler

Loop deyimleri kullanılmadan sadece iki sınıf kullanarak bir döngü oluşturula bileceğini biliyor muydunuz?  OPP mekanizması yanış kullanıldığında sistemi aşırı yorabilir.

Aşağıdaki iki sınıf kurucu metotlarında bir birlerini örneklerler A sınıfı kurucu metodunda B sınıfını örekler B sınıfı da kurucu metodunda A sınıfını bu sayede sonsuza uzayan bir döngü oluşturulur ve sistemin kilitlenmesine neden olur.

Dikkat aşağıdaki sınıflar sisteminin kilitlenmesine neden olabilir

class A{

var $b;
function A()
{
$this->b = new B();
echo "<br>A";
}
}
Class B{

var $a;
function B()
{
$this->a= new A();
echo "<br>B";
}
}

new A();

Sınıflara static durağan bir üye eklenerek ve sınıflardan birinde if ile kontrol edilerek bu problem aşılabilir. Aşağıda A ve B sınıflarının her birinden 10 ar adet oluşturan örnek

class A
{

static $say=0;

var $b;
function A()
{
A::$say++;
$this->b = new B();
echo "<br>A ".A::$say;
}
}
class B{

var $a;
function B()
{

if(A::$say!=10)
$this->a= new A();
echo "<br>B ".A::$say;
}
}

new A();