PHP’nin (muhtemelen) az bilinen 10 özelliği

Date03 / Haziran / 2008 Author İsa Engiz    Category php     Tags Yorumlar12 Yorum Yapilmis.

Bir programlama dilinden beklentileriniz nedir? Size, işlemlerinizi yapabilmeniz için gereken esnekliği sağlayabilmesidir en başta. Yetenekli olmasıdır.

php-ozellikler.jpg

Bu yazımızda da PHP’nin (muhtemelen) az bilinen 10 özelliğine beraberce göz atacağız.

#1: Veri türleri arasında çevrim

PHP’de değişken oluşturduğunuzda, oluşturduğunuz bu değişkenin veri türünü belirtmenize gerek yoktur, $x dersiniz ve değişkeninizi yaratmış olursunuz.

Ancak uygulamanızın ilerleyen safhalarında $x değişkeninin taşıdığı değerin “integer” olduğundan emin olmanız gerekirse ne yaparsınız? Şu şekilde rahatlıkla $x değerini integer yapabilirsiniz:

$x = 35.75;
 
echo (int) $x; //35

#2: Değişken değişkenleri

Bir değişkenin isminin değişken olması gerekirse ne yapabilirsiniz? Tabii ki değişkenin ismini değişken olarak tanımlarsınız!

$banka = “ziraatbank”;
$$banka = “bir kamu bankası”;
 
echo $ziraatbank;  //bir kamu bankası

Tabi bu özelliği kullanırken güvenlik açığı bırakmamak konusunda iki kez düşünmemiz gerekir!

#3: Değişken isimlerini sayılardan yapmak

PHP’de (ve diğer pek çok dilde) değişken isimlerini sayılardan oluşturamazsınız, $123 gibi. $sayi123 yapabilirsiniz ama $123sayi da yapamazsınız.

$123 yazmak konusunda bir inadınız varsa, değişken değişkenlerini kullanarak bir şeyler yapabiliriz:

$isim =123;
 
$$isim = “icerik...;
 
echo ${123}; // icerik...

#4: Fonksiyonları değişkenlere göre çağırmak

Bu belki biraz kafa karıştırıcı olabilir, ama önce şu örneği bir inceleyelim:

function deneme()
{
	echo “bu bir denemedir...;
}
 
$secim = “deneme”;
 
$secim(); //bu bir denemedir...

Normalde secim() isimli bir fonksiyonumuz yok, olsa bile $secim() şeklinde çağrılmaz. Ama burada çağrılacak fonksiyonun ismi, $secim değişkeninde tutulmakta ve onun taşıdığı değere göre ilgili fonksiyon çağrılmakta.

Bu özelliği de kullanırken güvenlik konularını yine iki kez düşünmemiz gerekir.

#5: Sabitler

Değişkenler olduğu gibi sabitler de bulunmaktadır ve kullanımları da yine çok basittir:

define(“YAZAR”, “isa engiz”);
 
echo YAZAR; //isa engiz

Sabitlerin avantajı, uygulamanın ilerleyen bölümlerinde de değiştirilemezler ve kullanırken $ işareti gerektirmezler. Büyük harfler yazılmalarına gerek yoktur ancak sabit olduklarını belrtmek için büyük harf kullanılır.

#6: İkinin katları ile çarpmak ve bölmek

Eğer değişkeninizi ikinin katları ile çarpmak veya bölmek istiyorsanız, bunun için (bana göre) ilginç bir yol bulunmakta:

$sayi = 5;
 
echo $sayi << 3;  // 5*2^3
 
echo $sayi << 6;  // 5*2^6
 
echo $sayi >> 1;  // 5/2^1
 
echo $sayi >> 7;  // 5/2^7

#7: Değişken değerlerini referans ile atamak ve değiştirmek

Önce aşağıdaki örneği inceleyelim:

$x = 10;
 
$y = &$x;
 
$y = 20;
 
echo $x; //20

Yaptığımız şey aslında $y değişkeninin içeriğine, referans ile $x değişkeninin adresini atadık ve biz $y değişkenine bir değer vermek istediğimizde bu değer $x değişkenine atanmış oldu.

#8: XOR, yani Exclusive OR

Bir if deyimi içerisinde “or” kullanırken düşünülen mantık: “bu iki değerden biri doğruysa… istenileni yap…” İkisi birden doğruysa yine istenilen işlemi yapar. XOR’un kullanımı işte burada devreye giriyor, “iki değerden yalnızca biri doğruysa… istenileni yap…” Kullanım şekli şuna benzer olacak:

if ($a == 10 XOR $b == 10)
{
	...
	...
}

$a veya $b den biri 10 olduğunda işlem gerçekleşecek, ama ikisi birden 10 olursa if deyiminin içerisine girmeyecek…

#9: Pratik if-else kullanımı

İf – Else kod blokları uzun olabilir, yazmak zor gelebilir, o zaman şöyle bir özellik kullanabilirsiniz:

$x = 10;
 
echo $x == 10 ? “doğru”: “yanlış”;
 
//yani...
 
if ($x == 10)
{
	echodoğru”;
}
else
{
	echo “yanlış”;
}

okunabilirlik açısından normal yazım şekli daha iyi gözüküyor ancak ilki kesinlikle daha pratik.

#10: Fonksiyonlara referans ile değer göndermek

Genelde fonksiyonlar size bir değer geri döndürürler ve kendisine gönderdiğiniz değişkenlere “zarar vermezler”, yani onların değerleri değiştirmezler.

Ama biz bazen değişkenin değerinin değiştirilmesini isteyebiliriz, bu durumda yine değişkenin değerini referans ile göndermeliyiz:

function sayiAyarla(&$deger)
{
	$deger = $deger / 10;
}
 
$sayi = 1000;
 
sayiAyarla($sayi);
 
echo $sayi // 100

Sonuç

Görüldüğü üzere PHP’nin pek sık gündeme gelmeyen özellikleri bulunmakta. Bu özellikleri kullanıp kullanmamak tamamen size kalmış, aynen dizi kullanıp kullanmamak gibi… Dizileri kullanmamızın sebebi bize pratiklik sağlamasıdır, bu özellikler de aynı şekilde yerinde kullanıldığında daha “etkili” kod yazmamızı sağlayacaktır.

- Bu blogda yer alan yazıları RSS ile takip edebilirsiniz. RSS aboneliği için tıklayın.

- Ya da bu blogda yer alan bütün yazıları içindekiler sayfasında görüntüleyebilirsiniz. Tıklayın!

PHP’nin (muhtemelen) az bilinen 10 özelliği yazısına 12 Yorum yapılmış.

  • faruk 03 Haziran 2008, 20:19

    Çok güzel bir yazı olmuş, teşekkürler.

    benim favorim $sayi << 7 :) hiç duymamıştım…

  • faruk 03 Haziran 2008, 21:01

    Bu arada kodlar için mavi arkaplan güzel olmuş :)

  • Hüseyin 03 Haziran 2008, 21:41

    Bu kodlar yaygın olarak kullanılmadığı için doğal olarak bilinmiyor. Bazıları işe yarayabilir ancak şahsen bunları bilmeme rağmen hiç kullanmadım.

    Yazı için teşekkürler.. Daha önce yazılmayan bir şeyi yazmışsınız.

  • İsmail Arı 05 Haziran 2008, 22:56

    Güzel bir yazı olmuş, teşekkürler.

    #6 hakkında açıklama yazılabilirdi, ben de yazına katkıda bulunayım :)

    O operatörler “bit kaydırma” olarak geçiyor. C dilinde de var. Örneğin; verdiğin ilk örnekte 5 sayısının ikilik hali (101), 3 sola kaydırılıp boşluklara 0 koyuluyor. Yani 101000 oluyor; o da 5 sayısının 8 katı, yani 40′a denk geliyor. Sağa kaydırmak da benzer şekilde işliyor. Aslında bölme demek biraz eksik kalıyor, çünkü bölme küsüratlı olabilecek bir işlem. Burada ise 5/2 = 2 edecek. Yani tamsayı bölmesi işlemi. Programlarda hız için kullanılan yöntemler bunlar.

    İyi çalışmalar.

  • İsa Engiz 06 Haziran 2008, 06:53

    Katkılarınız için teşekkürler.

  • brsyuksel 28 Haziran 2008, 18:40

    İsmail Arı’nın yazdığını yazacaktım ki kendisi güzelce açıklamış.

    Ellerine sağlık, kolay gelsin.

  • serkan 27 Eylül 2008, 17:34

    güzel makale olmuş :)
    #9,#4,#1 bunlar işe yaraya bilirde diğerlerini nerde kulana bilirim diye düşündüm fakat hiç uygun bi yer bulamadım :)
    birde;

    /*Alıntı*/
    Bu özelliği de kullanırken güvenlik konularını yine … düşünmemiz gerekir.
    /*Alıntı*/
    #2 ve #4 de böyle bi cümle kulanmışsın mesela ne gibi acıklar meydana gelebilir ?

  • İsa Engiz 27 Eylül 2008, 20:40

    İlginiz için teşekkürler.

    Güvenlik açığı konusu aslında değişken mantığından geliyor, değişebilir! 2. özellikte değişken ismini dinamik olarak tanımlıyoruz, burada dikkat etmemiz gereken kullanıcının bu değişken ismini değiştirmemesi.

    Şöyle bir senaryomuz olsun, kullanıcının doldurduğu bir form alanından gelen verilere göre bazı değişkenler tanımlayıp onun üzerinden işlem yapıyoruz, art niyetli bir kullanıcı bizim beklediğimiz değerden daha farklı bir değer girip hiç hesapta olmayan bir değişken üzerinden işlem yapılmasını sağlayabilir.

    4. özellikte aynı şekilde hiç hesapta olmayan bir fonksiyonun çağrılıp çalıştırılmasına neden olabilir. ( uyeSil() veya adminGiris() v.b.)

    Tabi art niyetli kişinin böyle bir açıktan faydalanabilmesi için yazılımın kodlarını görmesi gerekir, ama deneme yanılma yöntemiyle kritik fonksiyonların isimlerini de keşfedebilir.

    Güvenlik konusunda ilk yapılması gereken kullanıcıdan gelen veya kullanıcının değiştirebileceği bütün değerleri, işleme sokmadan önce kontrolden geçirmektir. Bu ön kontrolde yapılması gereken ise gelen değerle beklenen değeri karşılatırmaktır, beklenenden farklı bir değer gelmişse, muhtemel bir saldırı söz konusu olabilir…

  • serkan 28 Eylül 2008, 14:20

    hımm…
    teşekkürler hocam

  • Murat Gazioğlu 06 Kasım 2008, 18:58

    bende , bana çok ilginç gelen bir php kodunu yazayım;
    normalde date komutunu herkes bilir. geçmiş bir tarihi bulabilmek için pek çok kimse maketime benzeri fonksiyonlar yazar, genelde karışıktır bu fonksiyonlar. Eğer sadece tarihe ihtiyacınız varsa saat sizin için önemli değilse şu basit fonksiyonu kullanabilirsiniz ;

    echo date(“Y-m-d”, strtotime(“10 days ago”));

    çok saçma ama 10 gün öncenin tarihini Y-m-d olarak veriyor.
    Bazen hayat kurtarıcı olabiliyor, mesela ben 15 gün sisteme girmeyen üyelerin kayıtlarını silerken bu fonksiyonu kullanmıştım.

  • İsa Engiz 07 Kasım 2008, 10:04

    Evet, 11. özellik olabilir :)

    strtotime() fonksiyonunun manualine baktım, ve ilginç özellikleri var, mesela:

    echo strtotime(“now”), “\n”;
    echo strtotime(“10 September 2000″), “\n”;
    echo strtotime(“+1 day”), “\n”;
    echo strtotime(“+1 week”), “\n”;
    echo strtotime(“+1 week 2 days 4 hours 2 seconds”), “\n”;
    echo strtotime(“next Thursday”), “\n”;
    echo strtotime(“last Monday”), “\n”;

    Güzel bir fonksiyon olacak bundan sonra.. :)

  • mirc 09 Ocak 2009, 11:05

    tskler..

görüşünü belirt

Spam Protection by WP-SpamFree

Arama


E-Posta Aboneliği


RSS Aboneliği

En Çok Yorumlanan Yazılar

Etiketler

404 ajax apache arama butonu as astrofizik açık kaynak banner blogger blogger/blogspot Blogger / Blogspot blogspot case chmod css date dosya yükleme editör etiket etkinlik favicon featured form ftp galeri Genel gimp hata sayfası header htaccess htpasswd ilişkisel veritabanı index innodb javascript join JQuery kategori koodla linux mysql opacity php resim url

Son Yorumlar

  • Doğan Yılmaz: verdiğiniz bilgiler için çok ama çok teşekkür ederim. artık sıkı bir takipçiniz olmaya karar verdim
  • omer: delete from kategoriler where id = 5 and ustu = 5 sanırım küçük bi hata yaptınız AND yerine OR olacak DELETE...
  • Mustafa Kipergil: Uzun bir sürenşn ardından koodla.com’da yeni yazılarını görmek gerçekten mutlu oldum…...
  • Soner Gönül: Güzel olmuş gerçekten !
  • sinan: eyvallah..

Sayfalar


Faydalı Bağlantılar