Nis
25
2011

PHP Syntax/Söz Dizimi

PHP’ye Giriş başlıklı yazımızı okuyup, localde PHP ile denemelere başlayıp “syntax error” hatası almaya başladı iseniz doğru adrestesiniz, çünkü bu yazı sizler için tamda PHP syntax/söz dizimini konu alıyor.

PHP’ye Giriş yazımızda, PHP betiklerinin “<?php”, “?>” etiketleri arasına yazıldığını belirttiğimizden, bilinmesi gereken bu ilk syntax/söz dizimi kuralından sonra yine öncelikle bahsedilmesi gereken bir diğer basit ancak temel söz dizimi kuralı ile konuya girelim: PHP’de her komut noktalı virgül “;” ayracı ile biter.

PHP yorumlayıcı/çözümleyicisi, “;” ayraç sembolünü gördüğünde verilen komut satırının bittiğini ve o noktadan sonra yeni bir komut satırının başladığını anlar. Bir başka değiş ile PHP yorumlayıcı/çözümleyicisi, kodu satır satır değil, ayraç sembollerine ayırarak okur.

Bir örnek ile bunu anlamaya çalışalım.

	$dersNo = 2;
	echo "Kodcu.com PHP Dersleri Ders No: ".$dersNo;

Örneğimizi çalıştırdığımızda tarayıcı/browser’ımıza “Kodcu.com PHP Dersleri Ders No: 2” çıktısının basıldığını göreceğiz. Koda baktığımızda 1. satırda dersNo adında bir değişken tanımlayıp buna “=” operatörü ile(bakın bunlar da PHP syntax bilgileridir, ona gore :) ) 2 değerinin atandığını, 2. satırda ise echo(bir önceki yazımızdan hatırlayacağınız üzere, echo PHP’de bir yada daha fazla sayıda dizgeyi çıktılamak için kullanılır) ile “Kodcu.com PHP Dersleri Ders No: “ ifadesine, dersNo değişkeninin “.” operatörü ile(evet, buda syntax bilgisidir, nokta birleştirme operatörüdür) iliştirildiğini göreceksiniz. Şimdi 2. satırın sonundaki “;” ayracını kaldırıp, değişikliği kayderek sayfamımızı tekrar çağıralım.

Karşılaştığımız çıktıda hiçbir değişiklik olmadığı için şaşırdınız galiba! Acele etmeyin ve 1. satırdaki “;” ayracını da kaldırıp, değişiklikleri kaydettikten sonra sayfayı tekrar yükleyin.

Parse error: syntax error, unexpected T_ECHO in C:\wamp\www\kodcuDers.php on line 2

Evet şimdi yaşanana zoom yapalım. Yukarıda PHP yorumlayıcı/çözümleyicisinin ayraç sembolünü gördüğünde verilen komut satırının bittiğini anladığını, bir başka değiş ile PHP yorumlayıcı/çözümleyicisinin, kodu satır satır değil, ayraç sembollerine ayırarak okuduğunu söylemiştim.

Biz öncelikle 2. satırdaki ayraç sembolünü kaldırdık, dolayısı ile çözümleyici/yorumlayıcı 1.satırda yapılan değişken tanımlama ve değer atamasını gerçekleştirdikten sonra, 1. satıra geçip, echo ile çıktılamak istediğimiz metni çıktıladı ve 2. satırdan sonra çözümlenip yorumlanacak bir PHP betiği olmadığından çalışma zamanında bize “syntax error” uyarısı verilmedi. Ne zaman ki 1. satırdaki ayracı kaldırdık ve kodu çalıştırdık, PHP çözümleyici/yorumlayıcısı araları ayraçla ayrılmamış iki ayrı komut sebebi ile bizi uyardı.

Hata mesajına dikkat ederseniz 2. satırı işaret ettiğini görürsünüz. Bunun sebebi, çözümleyici/yorumlayıcının echo komutunu yeni bir komut başlangıcı olarak algılayamaması, bir başka değiş ile 1. satırda herhangi bir yazım hatasını görmemesidir. Tıpkı sadece 2. satırdaki ayracı kaldırdığımızda görmemesi gibi. Bu yüzden, yaptığınız syntax hatasını teşhis etmek noktasında son derece yararlı olan hata mesajlarındaki satır numarası bilgisinin, her zaman hata yada eksikliğin yer aldığı satırı göstermeyebileceğini aklınızdan çıkarmayın. Bu örnekte olduğu gibi hata/eksiklik bazen, hata mesajında bize bildirilen satırdan önce işlenmiş olabilir.

Örneklerimizde sık sık müracat edeceğimiz “echo” komutunun kullanımı, örneklerden de anlaşılacağı üzere, çıktılanması istenen ifadenin çift tırnak sembolleri arasına alınmasından ibarettir.

	echo "Çıktılanması istenen ifade";

Çıktılanacak ifade, bir değişkende saklanan değer ise, bir başka değiş ile echo komutuna çıktılaması için bir değişken verildiğinde çift tırnak sembollerine gerek kalmaz.

	$ifade = "Çıktılanması istenen ifade";
	echo $ifade;

Birde şu örneğe bakalım.


	$ifade="çift tırnak içine yazılan değişken adı, echo komutu ile çıktılanır.";
	echo "Çıktılanması istenen ifade: $ifade";

Sonuç:

Çıktılanması istenen ifade: çift tırnak içine yazılan değişken adı, echo komutu ile çıktılanır.

Burada aklınıza “biz, echo ile içinde çift tırnak sembolünün de yer aldığı bir ifade çıktılamak istersek ne olur?” sorusu gelebilir. Bu sorunun cevabı escape/kaçış sembolleri kullanmazsak şu olur: Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’

PHP’de, farklı amaçlarla kullanolan escape/kaçış sembolleri vardır, burada şimdilik sadece bu sorunla ilgili olan ters bölü “\” karakterine bakalım.

	echo "Sabah karşılaştığımızda bana \"merhaba\" dedi";

Sonuç:

Sabah karşılaştığımızda bana “merhaba” dedi

Görüldüğü üzere “\” escape/kaçış karakteri, PHP yorumlayıcı/çözümleyicisine, çift tırnak sembolünün, echo ile çıktılanması istenen ifadenin başlangıç yada bitiş noktasını gösterir bir karakter olmadığını, aksine çıktılanmsı istenen metnin bir parçası olduğunu söylememizi sağladı.

Ters bölü escape/kaçış karakteri PHP içinde özellikle HTML kodu çıktılamak istediğinizde işinize yarayacaktır.

echo "Ders Notları
1-Fatma 9
2-Ali  8
3-Hasan 8
4-Hüseyin 7
5-Salih 6

Kodu incelediğinizde göreceğiniz gibi PHP yorumlayıcı/çözümleyicisine, HTML etiketlerinde(align, color vb) yapılan değer atamalarında değerlerin içine yerleştirildiği çift tırnak sembollerinin, echo ile çıktılanmasını istediğimiz görselliğin başlangıç yada bitiş noktası olmadığını söyleyen, kodda kullandığımız ters bölü escape/kaçış sembolüdür.

PHP’de Veri Türleri

PHP’de veri türlerini üç ana gurupta toplamamız mümkündür.

  • Sayısal olmayan, karakter türleri
  • Sayısal türler
  • Diziler

PHP dilinde, diğer kimi programlama dillerinde olduğunun aksine, değişkenlerin saklayacakları veri türlerine bağlı olarak, değişkene değer atamasından önce veri türü ataması zorunlu değildir. PHP’de değişkenin veri türü, değişkene değer atandığı sırada da gerçekleşir. Diğer bir değiş ile bir değişkene değer atadığınızda bu aynı zamanda değişkene veri türü ataması yaptığınız anlamına da gelir.

Kod örnekleri ile bu durumu inceleyelim.

$rakam = 3;
$onay    = false;
$metin   = "Karakter/String veri türü";

//gettype, bir değişkenin türünü döndürür
echo "Rakam değişkeninin(sakladığı veri) türü: ".gettype($rakam)."
"; echo "Onay değişkeninin(sakladığı veri) türü: ".gettype($onay)."
"; echo "Metin değişkeninin(sakladığı veri) türü: ".gettype($metin)."
"; $rakam = "3"; $onay = "Karakter/String veri türü"; $metin = false; echo "Yeni değer atamaları sonrası:
"; echo "Rakam değişkeninin(sakladığı veri) türü: ".gettype($rakam)."
"; echo "Onay değişkeninin(sakladığı veri) türü: ".gettype($onay)."
"; echo "Metin değişkeninin(sakladığı veri) türü: ".gettype($metin)."
";

Kodu çalıştırdığımızda tarayıcı/browser’ımızda şu çıktı oluşacaktır.

Rakam değişkeninin(sakladığı veri) türü: integer
Onay değişkeninin(sakladığı veri) türü: boolean
Metin değişkeninin(sakladığı veri) türü: string
Yeni değer atamaları sonrası:
Rakam değişkeninin(sakladığı veri) türü: string
Onay değişkeninin(sakladığı veri) türü: string
Metin değişkeninin(sakladığı veri) türü: boolean

Şimdi kodumuzu satır satır inceleyelim.

1. satırda rakam isminde bir değişken deklare edip, buna “=” operatörü ile 3 rakamını atıyoruz, aynı şekilde bir sonraki satırda onay isimli değişkene mantıksal/logic false değerini atıyoruz, ardından metin ismindeki son değişkenimize string/karakter verisi atıyoruz.
5, 6 ve 7. satırlarda, değişken türü döndüren gettype fonksiyonu yardımı ile, değişkenlerimizin türlerini çıktılıyoruz.

Çıktılara da baktığımızda sırası ile değişkenlerimizin integer, boolean ve string türünde olduğunu görüyoruz. Kodumuzu 9. Satırdan okumaya devam edersek, bu satırdan başlayarak, aynı değişkenlere farklı değerler atadığımız görülür. Rakam değişkenimize yine 3 değeri veriyoruz ancak bu sefer bu değeri çift tırnak sembolleri arasına yazıyoruz, onay isimli değişkene string/karakter verisi atıyoruz, metin isimli değişkene ise mantıksal/logic false değerini.

Bu değer atamalarından sonra ekrana şu sonuç çıktılanıyor.

Yeni değer atamaları sonrası:
Rakam değişkeninin(sakladığı veri) türü: string
Onay değişkeninin(sakladığı veri) türü: string
Metin değişkeninin(sakladığı veri) türü: boolean

Çift tırnak içine alınan değer sebebi ile artık rakam değişkeni string türündedir, onay değişkeni kendisine atanan karakter verisi sebebi ile string, metin değişkeni ise false ataması ile artık mantıksal/logic türünde bir değişkendir.

Görüldüğü gibi PHP’de değişkenlere oluşturuldukları/deklare edildikleri anda değer atayabildiğimiz, bu atama ile değişkenin veri türünü belirlediğimiz gibi, kod içinde oluşturulmuş, değer ataması ile veri türü belirtilmiş bir değişkene, farklı türde veri atayabiliyor, böylelikle değer ve veri türü değişimi yapabiliyoruz.

Diziler

Diziler, aynı türde verileri tek bir değişkende saklama ihtiyacı gündeme geldiğinde imdadımıza yetişen bir veri saklama aracıdır. Aynı türde ancak sayıları birden fazla veriyi, veri sayısınca değişkende depolamak yerine tek bir dizide depolayabilmek kuşkusuz kod geliştiricisi için çok anlamlıdır. Diziler, özellikle döngüsel yapılarda son derece işlevsel hale gelmekte ve gereksiz kod yazımını minimize etmektedir.

Bunu somut bir örnek üzerinden anlamaya çalışalım. Örneğin, kodcu.com’da yer alan makalelerin kategorilerini, dizi kullanmadan listeleyecek bir kod yazmayı deneyelim.

	$kategori1 = "PHP";
	$kategori2 = "JAVA";
	$kategori3 = ".NET";
	$kategori4 = "HTML&CSS";
	$kategori5 = "JavaScript&AJAX";
	$kategori6 = "Veritabanları";

	echo "Kodcu.com'da yer alan makale kategorileri şunlardır:
" .$kategori1."
" .$kategori2."
" .$kategori3."
" .$kategori4."
" .$kategori5."
" .$kategori6;

Görüldüğü gibi, 6 kategori için 6 ayrı değişken tanımlamak zorunda kaldık ve kategorileri çıktılamak için kodda bu değişkenleri tek tek yazdık.

6 değil 16 yada 26 kategoride yazılar olduğunu düşündüğümüzde, gerek kodun yazımı gerek bakımı/güncellenmesi ve geliştirilmesi önünde, bu yazım/kullanım tekniğinin oluşturduğu sorun sanıyorum ortada.

Peki aynı sonuca, dizilerle nasıl ulaşabiliriz?

	$kategoriler = array("PHP","JAVA",".NET","HTML&CSS","JavaScript&AJAX","Veritabanları");

	foreach ($kategoriler as $makale)
	   print ("$makale 
");

Görüldüğü gibi, tek seferde yapılan atamalarla oluşturulmuş dizimizin elemanlarını, kullanım detayları bu yazının konusu olmayan foreach döngüsü yardımı ile, temelde tek bir satırla(kodumuzun 4. Satırı) çıktıladık.

Oluşturduğumuz dizimizin elemanlarına tek tek erişmemiz de mümkün.

echo $kategoriler[0]; //PHP stringi çıktılanır

Bu kullanımdan da anlayabileceğiniz gibi PHP’de dizi elemanlarının başlangıç indexi sıfır’dır. Bir dizi elemanına ulaşmak istediğimizde, elemanın index numarasını “[]” arasına yazarız. Yukarıda gördüğünüz kategoriler dizisi, tek boyutlu bir dizidir, PHP’de çok boyutlu diziler de vardır. Yazımızı, çok boyutlu dizi örneği ile noktalayalım.

	$kategoriler = array("PHP" => array("1" => "PHP'ye Giriş", "2" => "Syntax", "3" => "Veri Türleri"), "JAVA" => array("1" => "JavaSE", "2" => "JavaEE"), ".NET" => array("1" => ".NET'e Giriş"), "HTML&CSS" => array("1" => "ID Seçicileri"), "JavaScript&AJAX" => array("1" => "JavaScript'te Giriş"), "Veritabanları" => array("1" => "MySql", "2" => "PostgreSQL", "3" => "MsSql"));

var_dump($kategoriler); //var_dump, bir değişkenle ilgili bilgiyi dökümler

Yorum yapabilirsiniz..

En son haber ve ücretsiz eğitimlere ulaşmak için üye olabilirsiniz