->
PHP Dili
PHP yorumlayıcısı, bu “programı” çalıştırabilmek için dosyanın içinde PHP komutlarınıarar. PHP komutlarıbirinci bölümde gördüğümüz gibi iki şekilde yazılabilir:
1. <?PHP …. ?>
2. <? …. ?>
Bunlara PHP komut ayracıdenir; birinci türü uzun veya standart ayraç sayılır; ikincisine ike “kısa ayraç” denir.
PHP kodlarımız, oluşturulmasınıistediğimiz sayfanın HTML kodlarıile tabir yerinde ise içiçe yazılır.
<?PHP
           print “Merhaba Dünya!”;
?>
Sayfalara yorum eklemek için;
<HTML>
<!- - Bu satır HTML’in yorum satırı
Buraya istediğimiz kadar yorum yazabiliriz..
Browser bu satırlarıdikkate almaz - - >
<HEAD>
<TITLE>PHP ile Merhaba</TITLE>
</HEAD>
<BODY>
<CENTER>
<B>
<H1>
<?PHP
/*
Bu satır da PHP’nin çok-satırlıyorum bölümü..
Bunu da PHP yorumcusu asla dikkate almaz
Buraya istediğimiz kadar yorum yazabiliriz.
*/
           print “Merhaba Dünya!”;
// Bu ise PHP’nin tek satırlıyorum bölümü
# Bu satırlarıda PHP yorumcusu dikkate almayacaktır.
?>
</H1>
</B>
</CENTER>
</BODY>
</HTML>
PHP’de de, bir çok başka bilgisayar programlama dilinde olduğu gibi değişkenlerin içine bir değer konmadan önce tanımlanmasımümkündür; fakat gerekli değildir. Değişkenleri adının önüne $ işareti koyarak tanımlarız:
$adi;
$soyadi;
$123;
$sevdigiRenk;
PHP’de genellikle değişkenleri değerini atayarak belirleriz:
$adi = “Reşit”;
$soyadi = “Gülen”;
$123 = 123;
$sevdigiRenk = “yeşil”;
Değişkenler, kullanıldıklarıişleme, taşıdıklarıdeğeri verirler:
print $adi;
PHP’de özel bir değişkene değişken adıolarak kullanılacak değerleri de atayabiliriz:
$adi = “Reşit”;
$degisken = “adi”;
print $$degisken;
Burada Browser penceresine yine “Reşit” kelimesi yazılacaktır; çünkü PHP $degisken adlıdeğişkenin “adi” adlıdeğişkeni tuttuğunu bilecek ve iki Dolar işaretini görünce, $degisken’in değerini değil, onun tuttuğu değişkenin değerini yazacaktır.
Veri Türleri
PHP açısından dünyada altıtür değer vardır:
TamsayıÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (Integer): 5,124, 9834 gibi
Çift                            (Double): 3,567 gibi
Alfanümerik              (String): “Reşit” gibi
Mantıksal                 (Boolean): doğru (true)/yanlış (false) gibi
Nesne                                   (Object)
Dizi                            (Array)
Tür Değiştirme
Bir değişkenin değerinin türü hakkında kuşkunuz varsa, en emin yol bunu PHP’nin kendisine sormaktır. Bu sorgulamayıgettype() fonksiyonu ile yaparız.
şimdi, bir PHP programıyazalım, bir takım değişkenlere değerler atayalım ve bunların türlerini PHP’ye soralım.
           $sayi = 5;
           print(”Birinci değişkenin adı: \$sayi<br>”);
           print(”Değeri : “);
           print “$sayi<br>”;
           print(”Türü : “);
           print gettype( $sayi ) ; //tamsayi/integer
           print “<br>”;
           print “<br>”;
           $alfanumerik = “Reşit”;
           print “İkinci değişkenin adı: \$alfanumerik<br>”;
           print “Değeri : “;
           print “$alfanumerik<br>”;
           print(”Türü : “);
           print gettype( $alfanumerik ) ; //alfanümerik/string
           print “<br>”;
           print “<br>”;
           $ondalik = 5.1234;
           print “Üçüncü değişkenin adı: \$ondalik<br>”;
           print “Değeri : “;
           print “$ondalik<br>”;
           print(”Türü : “);
           print gettype( $ondalik ) ; //çift,ondalık/double
           print “<br>”;
           print “<br>”;
           $mantiksal = true;
           print “Üçüncü değişkenin adı: \$mantiksal<br>”;
           print “Değeri : “;
           print “$mantiksal<br>”;
           print(”Türü : “);
           print gettype( $mantiksal ) ; //mantıksal/boolean
           print “<br>”;
           print “<br>”;
Burada mantıksal (boolean) değer olarak doğru anlamına true değeri atadığımız halde, PHP’nin bu değişkenin değeri olarak 1′i gösterdiğine dikkat edin. PHP’de bir fonksiyon, elde ettiği değer doğru ise sonuç olarak 1 değerini verir. (Yanlış/false değerinin neye çevrildiğini bulabilir misiniz?)
Escape
şu satırdaki, ters-bölü işareti dikkatinizden kaçmamış olmalı:
           print “İkinci değişkenin adı: \$alfanumerik<br>”;
PHP için özel anlamıolan işaretlerin anlamlandırılmasınıönlemek ve bu işaretleri düz metin saymasınısağlamak için bu işaretlerin önüne ters-bölü işareti koyarız.
şöyledir:
\’Â Â Â Â Â Â Â Â Â Tek tırnak
\”         Çift tırnak
\\Â Â Â Â Â Â Â Â Â Ters-bölü
\$Â Â Â Â Â Â Â Â Dolar işareti
\n        Yeni Satır (New Line)
\r         Satır Başı(Return)
\t         Sekme (Tab) karakteri
Kimi zaman bir değişkene atadığımız değerin türünü değiştirmek gerekir. Bunu settype() fonksiyonu ile yaparız.
$degisken = 5.67890;
           print(”Değişkenin değeri : “);
           print “$degisken<br>”;
           print(”Türü : “);
           print gettype( $degisken ) ; //çift,ondalık/double
           print “<br>”;
           print “<br>”;
           print “İlk değiştirme işlemi: Alfanümerik/String:<br>”;
           settype( $degisken, string ); //alfanümerik/string (integer,double,booleon)
           print “Değeri : “;
           print “$degisken<br>”;
           print(”Türü : “);
           print gettype( $degisken ) ; //alfanümerik/string
           print “<br>”;
           print “<br>”;
Dört yararlıfonksiyon
isset() ve unset()
isset() fnksiyonu, PHP’nin bir değişkenin içinde değer bulunup bulunmadığınısınamasınısağlar. unset() ise varolan bir değişkeni yok eder.
if (isset($bir_degisken)) {
print( $bir_degisken );
}
else {
unset($bir_degisken);
}
Bu kod parçası, $bir_degisken isimli dğişkenin içi boş değişse, içeriğini görüntüleyecek, içi boş ise varlığına son verecektir.
empty()
isset() fonksiyonun tersi işleve sahiptir; bir değişkene değer atanmamışsa, veya değeri sıfır veya boş alfanümerik (null string) ise, doğru (True) değeri verir.
$bir_degisken = 123;
echo empty($bir_degisken);
$bir_degisken = “”;
echo empty($bir_degisken);
is_string(),is_integer(),is_double(), Â
Sınadıklarıdeğişkenin aradıklarıtürden değer içermesi halinde doğru ‘True) sonuç verirler.
<?php
           $a = 6.567;
if (is_double($a)) {
           print (”A Double’dır<br>”);
           }
           $b = “Reşit”;
if (is_double($a)) {
           print (”B String’dir<br>”);
           }
           $c = 6;
if (is_int($c)) {
           print (”C Integer’dır<br>”);
           }
?>
Bu kod, Browser penceresine “A double’dır, B String’dir, C Integer’dır” yazdıracaktır. PHP’de bu fonksiyonlara benzeyen fakat başka tür değer arayan şu fonksiyonlar da vardır: is_array(), is_object.
İşlemciler (Operatörler)
Aritmetik işlemciler:
+             Toplama                 6+5     =  11
-              Çıkartma                6-5     =    1
/               Bölme                   6/5      = 1.2
*              Çarpma                  6*5     =  30
%Â Â Â Â Â Â Â Â Â Â Â Â Kalan (Modulus)Â Â Â Â 6%5Â Â Â Â =Â Â Â Â 1
$sayi=4.5;
echo floor($sayi);Â Â Â Â Â Â Â Â Â =>> 4 (Sayıyıaşağıya yuvarlar)
echo ceil($sayi); Â Â Â Â Â Â Â Â Â Â Â =>> 5 (Sayıyıyukarıya yuvarlar)
echo round($sayi);Â Â Â Â Â Â Â Â =>> 5 (Sayıyıyuvarlar)
echo max(13,12,5,7); Â Â Â Â =>> 13
echo min(13,12,5,7); Â Â Â Â Â Â =>> 5
Rastgele Sayı
Srand((double) microtime()*1000000);
echo rand(20,30)Â Â Â Â Â Â Â Â =>> (20-30 arasısayıdöndürür)
PHP’nin atama işlemcisinin eşittir (=) işareti olduğunu hatırlıyorsunuz birleşik-atama (combined-assignment) işlemcileri, bu işarete diğer aritmetik işlemciler eklenerek oluşturulur.
İşlemci                    Örnek                         Anlamı
+=Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a += 5Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a = $a + 5
-=Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a -= 5Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a = $a - 5
/=Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a /=5Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a = $a / 5
*=Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a *= 5Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a = $a * 5
%=Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a %= 5Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $a = $a % 5
.=                            $a .= “metin”                $a = $a” metin”
                            Bir Arttırmak veya Azaltmak için
Değerleri sadece 1 arttırmak veya azaltmak için PHP, bir kolaylık sağlar:
$a++ veya ++$a             : $a’nın değerini 1 arttırır;
$a–   veya –$a              : $a’nın değerini 1 eksiltir.
PHP’nin karşılaştırma yapmasıiçin kullandığımız işlemciler ise işlem işaretinin sağıve solundaki değerleri veya değişkenlerin değerlerini işaretin belirttiği karşılaştırmayıyaptıktan sonra ortaya ya doğru (true) ya da yanlış (false) sonucunu çıkartırlar.
İşlemci    Örnek            Örnek       $a=6 ise:
==           eşitse               $a == 5      Yanlış/False
!=            eşit değilse       $a != 5       Doğru/True
===         aynıise            $a === 5   Yanlış/False
>             büyükse          $a > 5        Doğuru/True
<             küçükse          $a < 5        Yanlış/False
<=           küçükse          $a <= 5      Yanlış/False
                veya eşitse             Â
>=           büyükse          $a >= 5      Doğru/True
                veya eşitse
PHP’de bu karşılaştırmayıiki grubun arasına koyduğumuz işaretlerle yaparız İşaretin sağ ve sol tarafının doğruluğu veya yanlışığıişarete göre nihai sonucun doğru veya yanlış olmasını sağlar. Bu karşılaştırmalarıyaparken şu işlemcileri kullanırız:
İşlemci    Adı                        Anlamı                                 Örnek
||              veya                sol veya sağ doğru             doğru || yanlış = doğru
or            veya                sol veya sağ doğru             doğru || yanlış = doğru
&&          ve                   sol ve sağ doğru                            doğru || yanlış = yanlış
and          ve                   sol ve sağ doğru                            doğru || yanlış = yanlış
Xor          şartlı-veya       Sadece sol veya sağ doğru doğru || yanlış = doğru
!              Değil               sol veya sağ yanlışÂ             doğru || yanlış = doğru
<?php
           $vize = 45;
           $final = 65;
           if ($vize >= 50 && $final >= 50) {
           print (”Öğrenci geçti!”);
           }
           else {
           print (”Öğrenci kaldı!”);
           }
?>
Sabit Değerler
define (”SABIT_DEGER”, değer);
Burada SABIT_DEGER yerine, tanımlamak istediğimiz sabit değere vereceğimiz isim, değer yerine de sabit değeri yazarız. Örnek:
<?php
           $Dolar_miktar = 125;
           define ( “DOLAR_KURU”, 625675);
           $TL_Tutar = $Dolar_miktar * DOLAR_KURU;
           print ($TL_Tutar);
?>
Tanımlanmış olan bir sabiti yeniden oluşturamayız; ama buna teşebbüs ettiğimizde PHPÂ hata vermez. Bir sabit değerin oluşturulmuş olup olmadığınıdefined() fonksiyonu ile anlayabiliriz:
<?php
           $Dolar_miktar = 125;
           if (defined( “DOLAR_KURU” )) {
           echo (”Sabit değer daha önce tanımlanmıştı.<br>”);
           }
?>
Dizi-Değişkenler
Dizi değişkenden ayrıntılısöz edebilmek için önce tipik bir dizi-değişkende neler olduğuna bakalım. Sözgelimi, verdiğiniz “PHP ile Programlama” kursundaki öğrencilerinizin listesi şöyle olabilir:
Dizi Değişken Oluşturalım
şimdi, PHP bize öyle bir araç vermeli ki, biz bir kerede bu listenin tümünü, her bir ögesine sanki bir değişkenin değeri imiş gibi tek-tek, veya bir kaçına birden ulaşabilmeli ve arzu ettiğimiz zaman notlarıdoldurabilmeliyiz. Öğrenciler de yapacağımız Web sitesine girerek, kendi notlarınıgörebilmeli ve notlarınıinceleyebilmeli. PHP’nin bu amaçla sağladığıaraç, çok-boyutlu dizi-değişken oluşturma aracıdır. Ve bu araçla yukarıdaki listeyi aynen şöyle yapabiliriz.
<?php
$ogrenciler = array (
array ( adi => “Özbay”, soyadi => “Altun”, sinav1 =>”", sinav2 =>”", not =>”"),
array ( adi => “Muharrem”, soyadi => “Taç”, sinav1 =>”", sinav2 =>”", not =>”"),
array ( adi => “Hasan”, soyadi => “Civelek”, sinav1 =>”", sinav2 =>”", not =>”"),
array ( adi => “şahika”, soyadi => “Tabak”, sinav1 =>”", sinav2 =>”", not =>”"),
);
// Buraya başka kodlar girecek
print $ogrenciler[0][adi];
?>
Programdaki “print()” komutunu sadece dizi değişkeni doğru yazıp yazmadığımızısınamak amacıyla yazdık; bu programıBrowser’da açtığınızda yazdığınız ilk ismi Browser penceresinde görüyorsanız, dizi-değişkeni doğru şekilde oluşturdunuz demektir. Burada, array() komutnu yazarken, süslü parantez değil, normal parantez kullandığımıza ve herbir elemanın değerlerinin sonunda vrigül olduğuna dikkat edir. Bir diğer önemli nokta: endeks adlarıbir kelimeden fazla ise bunlarıtırnak içine alarak belirtmektir. Örneğin:
array ( adi => “Özbay”, soyadi => “Altun”, “Sinav 1 Notları” =>”", “Sinav 2 Notları” =>”", “Toplam Not Ortalamasi” =>”"),
Burada, daha öncekilere benzer bir şekilde adlandırılmış $ogrenciler değişkenin içeriğini array() komutu ile doldurduğumuzu görüyoruz. Array() ile böyle çok boyutlu ve içerdiği değerlerin her birinin bir “endeks adı” olan dizi-değişkene İlişkili Dizi (Associative array) de denir. Perl bilenler ise bu tür değişkenlere “Hash” dendiğini hatırlayacaklardır. İlişkili Dizi’lerin birinci satırı0, ikinci satırı1, üçüncü satırı2.. diye numaralandırılır. Bu dizinin o satırındaki kaydın sıra endeksidir. Ayrıca burada “adi,” “soyadi,” “sinav1″ .. dizi değişkenin içindeki değerlerin endeks adıdır. Yani bu değerlere atıfta bulunurken, referans yaparken veya bu değerleriekullanmak amacıyla erişirken sıra endeksi ve endeks adıyla hitabederiz. Yukarıdaki sınama amaçlıprint() komutuna bakarsanız, birinci öğrencinin ismini “[0][adi]” olarak çağırıyor.
Çok elemanlıilişkili dizi oluşturmanın bir diğer yolu, yeri geldiğinde böyle bir dizi için yeni bir üye ilgili bilgileri eleman endeksi ve değerler için endeks adıbelirterek şöyle bir kod yazmaktan ibarettir.
<?php
                       $ogrenciler[0][adi] = “Özbay”;
                       $ogrenciler[0][soyadi] = “Altun”;
                       $ogrenciler[0][sinav1] = “”;
                       $ogrenciler[0][sinav2] = “”;
                       $ogrenciler[0][not] = “”;
// Buraya Buraya başka kodlar girecek
                       print $ogrenciler[0][adi];
?>
Bir dizi değişkende kaç boyut olacaksa, o kadar içiçe array() ögesi oluşturabiliriz. Buna göre tek boyutlu bir dizi değişken sadece bir array() komutu ile ve sadece değerler verilerek oluşturulabilir. Diyelim ki yukarıdaki öğrenci listemiz sadece öğrencilerin isimlerinden oluşacak. Bu durumda $ogrenciler değişkenine ilişkin satırışöyle yazabilirdik:
$ogrenciler = array (”Özbay”, “Muharrem”, “Hasan”, “şahika”);
PHP, böyle tek boyutlu bir dizinin örneğin birinci elemanını, “$ogrenciler[0]” adıyla bilir. Böyle bir tek-boyutlu diziyi oluşturmak için PHP bize başka bir kolaylık da sağlar: array() komutunu kullanmadan, doğruca dizinin ögelerine değer vermemiz mümkündür. Yukarıdaki programın sadece PHP bölümünü şöyle değiştirerek kaydedin:
<?php
                       $ogrenciler[] = “Özbay”;
                       $ogrenciler[] = “Muharrem”;
                       $ogrenciler[] = “Hasan”;
                       $ogrenciler[] = “şahika”;
// Buraya başka kodlar girecek
           print $ogrenciler[0];
?>
Böyle sırayla dizi değişken oluşturur veya oluşturulmuş bir dizi değişkene ek yaparken, değişkenin sıra numarasınıyazmazsak, PHP bunlarıkendisi sıralar. Yukarıdaki kodun da Browser penceresine “Özbay” yazdırmasıgerekir. Mevcut tek-boyutlu bir dizi değişkene ek yaptığımızda, be yeni değerin dizinin en altına eklenmesini istiyorsak, sıra numarasıyazmamıza gerek yoktur. Mevcut değerlerden birini değiştirmek istiyorsak, o değerin sıra numarasınıyazmamız gerekir. Bunu denemek için yukarıdaki kodu şöyle değiştirilim
<?php
                       $ogrenciler[] = “Özbay”;
                       $ogrenciler[] = “Muharrem”;
                       $ogrenciler[] = “Hasan”;
                       $ogrenciler[] = “şahika”;
// Buraya başka kodlar girecek
                       $ogrenciler[0] = “Emre”;
                       $ogrenciler[15] = “Özbay”;
           print (”Dizideki 1′nci isim: $ogrenciler[0] <br>”);
           print (”Dizideki 2′nci isim: $ogrenciler[1] <br>”);
           print (”Dizideki 3′ünci isim: $ogrenciler[2] <br>”);
           print (”Dizideki 4′üncü isim: $ogrenciler[3] <br>”);
           print (”Dizideki 5′inci isim: $ogrenciler[4] <br>”);
           print (”Dizideki 6′ncıisim: $ogrenciler[5] <br>”);
           print (”…………..<br>”);
           print (”Dizideki 15′nci isim: $ogrenciler[15] <br>”);
          Â
?>
Bu programın Browser penceresine göndereceği sırada, birinci öğrenci ($ogrenci[0]) olarak bu kez Özbay değil Emre yazdığınıgöreceğiz.
Bunun sebebi, diziyi oluşturan ilk grup deyimden sonra,
                       $ogrenciler[0] = “Emre”;
satırıile birinci elemanın değerini değiştirmiş olduk. 15′nci elemana atama yapmakla, PHP’nin $ogrenciler dizisinde 6, 7, 8, 9,.. 14′e kadar boş elemanlar oluşturmasına sebep olduk.
Tek boyutlu dizileri de İlişkili Dizi olarak oluşturabilir yani değerlere endeks adıverebiliriz.
<?php $ogrenci[adi] = “Özbay”;
           $ogrenci[soyadi] = “Altun”;
           $ogrenci[sinav1] = “”;
           $ogrenci[sinav2] = “”;
           $ogrenci[not] = “”;
// Buraya başka kodlar girecek
           print $ogrenci[adi];
?>
PHP, $ogrenci adlıdeğişkenin beş ayrıdeğeri olduğunu ve bunların “adi,” “soyadi,” “sinav1″… olduğunu biliyor. şimdi artık istediğimiz noktada bu değişkenin istediğimiz değerine, o değerin endeks adınıyazarak, çağrıda bulunabiliriz; bu değeri yeniden verebiliriz.
Dizi değişkenleri kullanalım
Yukarıdaki paragrafta “..değişkenin istediğimiz değerine, o değerin endeks adınıyazarak, çağrıda bulunabiliriz..” dediğimizi görmüş olmalısınız. Dizi veya tekil, değişkenleri oluşturmamızın sebebi, tuttuklarıdeğerleri programımızın gereği olan şekilde ve yerde kullanmaktır. Sadece bir değer tutan değişkenleri örneğin print() komutu ile sık sık kullandık. Yukarıda dizi değişken örneklerinde de bazıdeğişkenleri ve değerlerini çağırdık. Ancak dizi değişkenlerin değerlerinden yararlanabilmek için başka araçlar da vardır.
Herşeyden önce dizi değişkenlerin büyüklüğü, boyutu bizim için önem taşıyabilir. Özellikle bir veritabanıdosyasınıokutarak oluşturacağımız dizi değişkenin kaç elemanıve her bir elemanın kaç ögesi bulunduğunu bilmemiz gerekebilir.
Bir dizi değişkenin kaç elemanıbulunduğu, o değişkenin count() özelliği sorgulanarak öğrenilir. count(), dizideki eleman sayısınıverir. şimdi bunu bir örnekle görelim.
<?php
                       $ogrenciler[] = “Özbay”;
                       $ogrenciler[] = “Muharrem”;
                       $ogrenciler[] = “Hasan”;
                       $ogrenciler[] = “şahika”;
// Buraya başka kodlar girecek
print (”\$ogrenciler adlıdizide “. count($ogrenciler) .” adet eleman var.”);
?>
Bu program Browser penceresine dizimizde 4 eleman bulunduğunu bildirecektir. şimdi işleri biraz karmaşık hale getirelim! Yukarıdaki kodun, print() satırının yerine şu satırlarıekleyerek, kaydedelim.
print (”\$ogrenciler adlıdizide “. count($ogrenciler) .” adet eleman var.”);
print (”<br><br>”);
for ($sayac=1 ;Â $sayac <= count($ogrenciler) ; $sayac++ ) {
print (”\$ogrenciler dizisinin “. $sayac .”‘ncıelemanı: ” . $ogrenciler[$sayac] .”<br>”);
}
Bu programıçalıştırmadan önce, eklediğimiz satırlarıirdeleyelim. İlk print() komutunun Browser penceresine “yazdıracağı” metinde geçen ters bölü işaretini hatırlıyor olmalısınız. Bu, tek veya çift tırnak içine de almış bile olsak, PHP’nin, bir değişken adınıgördüğü zaman onun yerine o değişkenin tuttuğu değeri yazmasısebebiyle, $ işareti gibi PHP için özel anlamıolan işaretlerin anlamlandırılmasınıönlemek için yaptığımız ve adına o karakteri kurtarma veya ESCaping dediğimiz işlemdir. Bu işlemle, PHP’nin anlamlıişaret değil de metin saymasınıistediğimiz karakterlerin önüne ters bölü işareti koyarız: \” gibi. Buradaki örnekte, bu sayede PHP “$ogrenciler” kelimesini değişken adıolarak değil, düz metin olarak görüyor. Ki, aynıkomutta aynıkelimeyi tekrar kullandığımızda bu kez değişken adıolarak kullanıyoruz ve bu değişkenin count() ögesinin değerini öğreniyoruz. $ogrenci değişkenin “Özbay,” “Muharrem,” “Hasan” ve “şahika” değerleri bulunduğuna göre, bu değişkenin count()‘u 4 olacaktır. (”Ozbay” = 0, .. “şahika” = 3 olmak üzere..) Bu print() komutu, Browser penceresine tahmin ettiğiniz gibi “$ogrenciler adlıdizide 4 adet eleman var.” yazdıracaktır. İkinci print() satırıise ekrana ardarda iki yeni satır işareti gönderecektir.
şimdi karışık noktaya geliyoruz! Burada bir for döngüsü başlıyor. Önce döngünün kaç kez tekrar edeceğini belirleyecek olan değişkeni tanımlıyoruz: $sayac. Sonra bu sayacın kaça kadar çıkacağını belirliyoruz. Bu sayıyı, bize yine count() veriyor. Ve tabiî for döngüsünün devam edebilmesi için gerekli son unsur olan, sayacın arttırılmasınısağlayan deyim var. Programımız bu döngünün içinde, yani dört kez, her seferinde dizinin bir elemanın adınıBrowser penceresine gönderiyor. şimdi, hatırlayacaksınız, dizi değişkenlerin elemanlarının bir sıra sayısıvardı. Örneğin “şahika” değeri, dizinin 3 numaralı, yani dördüncü elemanı; ve bu elemanın değerini ekrana göndermek için şu komutu vermemiz yeterli:
print ($ogrenciler[4]);
Programda ise buradaki endeks sayısını, $sayac değişkeninin o andaki değerinden alıyoruz. Döngünün her seferinde bu değer bir artacağıiçin bize $ogrenciler değişkeninin o anda hangi elemanının değeri çağırmak istiyorsak, o elemanın endeksini vermiş olacaktır. Ve sonuç olarak programımız, dizideki bütün değerleri Browser’a gönderecektir.
Kimi zaman buradaki örnekte olduğu gibi, dizinin bütün elemanlarınıbir for döngüsüyle değil, foreach döngüsüyle bulmak daha kolay olabilir. Kısaca belirtmek gerekirse, foreach döngüsü, bir dizi değişkenin bütün elemanlarıiçin, arzu ettiğiniz işi yapar. foreach döngüsünü yazarken komutun kaç kere icra edileceğini bir sayaçla tutmak gerekmez; çünkü döngü, ona adınıverdiğiniz değişkenin içindeki bütün değerler bitinceye kadar devam edecektir.
foreach ($ogrenciler as $ogrenci) {
           print (”$ogrenci<br>”);
           }
foreach döngüsü, bir dizi değişkenin adınıiçinden değer çekilecek kaynak olarak ister; bunu “as” (olarak) kelimesi izler; sonra diziden alınacak her bir değeri geçici olarak tutacak değişkenin adıverilir. Buradaki print() komutumuz, bu geçici değişkenin tuttuğu değeri Browser’a gönöderecektir. Bu değer ise döngünün her adımında dizi değişkendeki bir değer yani öğrencilerin listesi olacaktır.
Dizi elemanlarının farklıözelliklerine ilişkin değerlere endeks adıverdiğimiz ilişkili dizilerde ise eleman değerlerini çağırmak foreach döngüsünün biraz farklıyazılmasınıgerektirir. Perl’e aşina alanların bu dizi türüne “hash” dendiğini hatırlayacaklardır. PHP’de de Perl’ün hash türü değişkenlerinde olduğu gibi, endeks adlarına “anahtar” (key), bu endeksin belirlediği değere ise (evet, doğru tahmin ettiniz!) değer (value) denir. İlişkili dizilerden değer almak üzere foreach döngüsü yazılırken, değerin anahtarınıve değerin kendisini iki geçici değişkene yazmamız gerekir
foreach ($ogrenciler as $anahtar=>$deger) {
print (”$anahtar = $deger<br>”);
}
Bu kodu çalıştırmadan önce foreach döngüsü üzerinde kısaca duralım: döngü, $ogrenciler dizisini okumaya başladığında içinde, benzetme yerinde ise, iki sütun, ve bir çok satırlar bulacaktır. Bu sütunlardan birincisi, ikinci sütundaki verinin adıdır; foreach, birinci sütundaki veriyi alarak $anahtar adlıgeçici değişkenin değeri olarak atayacak; sonra ikinci sütuna geçecek ve bunu alarak $deger adlıgeçici değişkenin değeri yapacaktır. Döngü, daha sonra print() komutunu icra edecektir. print() ise ve geçici $anahtar değişkeninin değerini, ardından eşittir işaretini ve son olarak da geçici $deger değişkeninin değerini Browser’a gönderecektir. print() komutunun icrasıbitince, foreach, kendisine verdiğimiz $ogrenciler değişkeninde anahtar-değer çiftini ele almadığısatır kalıp kalmadığına bakacak, ve elemanların tümü bitinceye kadar bu işlemi tekrar edecektir. Tabiî, sonuç anahtar ve değerlerin altalta sıralanmasıolacaktır.
Bir de bu bölümün en başında ele aldığımız çok elemanlıilişkili diziler vardı. Onların içindeki değerleri acaba nasıl alabilir ve kullanabiliriz? Tabiî yine bir döngü ile. Fakat bu kez, döngü-içinde-döngü kullanmak zorundayız. Böyle bir diziyi gözümüzde canlandırırsak, belki neden iki döngüye ihtiyaç olduğununu daha iyi görebiliriz. Gözümüzün önüne bir tablo getirelim: dizinin her bir elemanı(bizim öğrenimizde öğrenciler9 bir satırda yer almış olsun; sütunlar olarak da bu elemana ait değerler yer alıyor. Sütun başlığıise, bu değerin endeksi olan anahtar
foreach ( $ogrenciler as $ogrenci ) {
           foreach ( $ogrenci as $anahtar => $deger ) {
                       print (”$anahtar = $deger <br> “);
                       }
           print (”<br>”);
           }
Kısaca irdelersek, bu kodda foreach döngüsünün önce çok-boyutlu değişkenimizin bir satırınıiçindeki bütün anahtar+değer çeftleri ile ele alıp, tümünü $ogrenci adlıdeğişkene geçici olarak yerleştirdiğini görüyoruz. Bu foreach döngüsünün ilk işi yeni bir foreach döngüsü başlatmak oluyor. Yeni foreach ise sazıeline alır almaz, önce, kendisi çok ögeli bir değişken olan (çünkü içinde bir öğrenciye ait, tüm değişkenler ve onların endeks adlarıvar) $ogrenci değişkeninin içindeki anahtar ve değer çiftlerini tek-tek, $anahtar ve $deger değişkenlerine yerleştiriyor; sonra print() komutu ile, aralarına eşittir işareti koyarak bu değişkenlerin değerlerini Browser penceresine gönderiyor. Bu döngü biter bitmez, ilk foreach yaptıracağıişlere kaldığıyerden devam ediyor; ve ekrana bir yeni satır komutu gönderierek, başa dönüyor; bu kez çok boyutlu dizi değişkenin yeni bir elemana geçiyor. Taa ki, dizinin bütün elemanlarıve elemanların bütün ögeleri bitinceye kadar.
Bu noktada bir uyarı: Gerçek programda bir dizinin elemanlarına ilk ulaştığımızda, elemanın içinde değer bulunup bulunmadığınıanlamak yerinde olur. Bunu is_array() fonksiyonu ile yapabiliriz. Bu fonksiyon, dizinin içinde değer varsa, True/Doğru, yoksa False/Yanlış karşılığınıverecektir. Buradaki örnekte, ilk foreach satırından hemen sonra:
is_array( $ogrenci )
satırınıkoyarak, dizinin o anda okunan elemanın içinde değer bulunup bulunmadığınıanlayabiliriz.
Dizi Değişkenlerin Düzenlenmesi
Dizi değişkenlerin daha verimli şekilde kullanılmasıiçin PHP bize bir takım araçlar sağlar. Bunlarla dizi değişkenleri birleştirebiliriz; içinden kesit alabiliriz, sıralayabiliriz veya bazıelemanlarınısilebiliriz. şimdi kısaca bu işlemleri ele alalım:
                            Dizileri birleştirme: array_merge()
İki veya daha fazla dizinin bütün elemanlarınıbirleştirerek, ortaya yeni bir dizi çıkartır. Örnek:
$birinci_dizi = array ( “Özbay” , “Muharrem” , “Hasan” , “şahika” );
$ikinci_dizi = array ( “Altun” , “Taç” , “Civelek” , “Tabak” );
$yeni_dizi = array_merge ( $birinci_dizi, $ikinci_dizi );
Bu kod ile oluşturulan $yeni_dizi isimli dizi değişkenin hangi elemanlara sahip olduğunu, şöyle bir kodla görebilirsiniz:
foreach ( $yeni_dizi as $yeni_eleman ) {
           print (” $yeni_eleman <br>”);
           }
İkinci dizinin bütün elemanları, birinci dizinin elemanlarının arkasına eklenmiş olmalı. array_merge() işlemi, çok-boyutlu ilişkili dizilere de uygulanabilir; PHP iki dizideki uyumlu-uyumsuz, yani birinde olan diğerinde olmayan bütün anahtar+değer çiftlerini yeni dizide de oluştur. (array_merge() işleminden sonra birleştirilen dizilerin değişmeden kaldığına dikkat edin.)
                           Â
                            Dizilere değişken ekleme: array_push()
Bir diziye yeni değişkenler eklemek için, array_push() fonksiyonuna mevcut dizinin adınıve yeni değerleri yazarız. Örnek:
$birinci_dizi = array ( “Özbay” , “Muharrem” , “Hasan” , “şahika” );
$yeni = array_push ($birinci_dizi, “Altun” , “Taç” , “Civelek” , “Tabak” );
Burada $yeni adlıdeğişken sadece $birinci_dizi adlıdizinin yeni eleman sayısınıtutar. array_push(), kendisine adınıverdiğimiz dizinin içeriğini değiştirir. Yukarıdaki örnekte içine yeni değerler yazılan dizinin elemanlarınıgörüntülemek için şöyle bir kod yazabiliriz:
print (”\$birinci_dizi adlıdizide $yeni_dizi adet değişken var<br>”);
foreach ( $birinci_dizi as $ogrenci ) {
           print (”$ogrenci <br> “);
           }
                            Dizinin ilk elemanınısilme: array_shift()
Bir dizi-değişkenin ilk elemanınıtümüyle silmek için array_shift() fonksiyonunu kullanırız. Bu fonksiyona sadece birinci elemanısilinecek dizinin adınıvermek yeter.
Örnek:
$birinci_dizi = array ( “Özbay” , “Muharrem” , “Hasan” , “şahika” );
$silinen = array_shift ($birinci_dizi);
array_shift(), adınıverdiğiniz dizinin içeriğini değiştirir; buradaki örnekte, $silinen adlıdeğişken dizinin silinen birinci elemanın değerini tutar.
                            Diziden kesit alma: array_slice()
Bir dizi-değişkenin bütün elemanlarıyerine bir kesitini kullanmak istiyorsak, bunu array_slice() fonksiyonu ile yapabiliriz. Bu fonksiyona kesit alınacak dizinin adı, kesitin başladığıyer ve kaç adet değişken alınacağıargüman olarak verilir.
 Örnek
$birinci_dizi = array ( “Özbay” , “Muharrem” , “Hasan” , “şahika”, “Altun” , “Taç” , “Civelek” , “Tabak”);
$kesit = array_slice ($birinci_dizi , 3, 4);
Burada, PHP’ye $kesit adlıyeni dizi değişkene, $birinci_dizi adlıdizinin 3′ncü değerinden itibaren (3 dahil) dört değeri yerleştirmesini bildiriyoruz. array_slice(), adınıverdiğimiz değişkenin içeriğine dokunmaz; yeni dizi değişken oluşturulur.
                            Dizileri sıralama: sort() ve rsort()
Bir dizinin içindeki değerleri alfabetik veya küçükten büyüğe doğru sıralamak için sort() fonksiyonunu kullanırız.
Örnek:
$birinci_dizi = array ( “Özbay” , “Muharrem” , “Hasan” , “şahika”, “Altun” , “Taç” , “Civelek” , “Tabak”);
sort ($birinci_dizi);
PHP, dizideki bütün değerleri A’dan Z’ye sıraya sokacaktır. sort() fonksiyonu dizinin içeğini değiştirir. Bir diziyi Z’den A’ya veya büyükten küçüğe doğru sıralamak için de rsort() fonksiyonunu kullanabilirsiniz. (PHP4.0 Türkçe karakterleri tanımıyor.) Bir noktada dikkatli olmak gerekir: bu fonksiyonu ilişkili (değerlerin anahtarıolarak endeks adıbulunan) dizide kullanırsanız, PHP, anahtar değerlerini (endeks adlarını) atar, yerine 0′dan itibaren rakam koyar. Bunu önlemek için, ilişkili dizileri asort() veya ksort() fonksiyonu ile sıralamak gerekir.
                            İlişkili dizileri sıralama: asort() ve ksort()
İlişkili dizilerin diğer dizi değişkenlere göre farkı, değerlerinin bir de adıbulunmasıdır. Değerlerin adlarına anahtar denir. Bir ilişkili diziyi değerlerine göre sıralamak için asort() fonksiyonu kullanılır.
Örnek:
$birinci_dizi = array ( ogr_01=>”Özbay”, ogr_02=>”Muharrem” , ogr_013>”Hasan” , ogr_04=>”şahika”);
asort ($birinci_dizi);
PHP, bu diziyi değerler itibariyle alfabetik sıraya sokacaktır. Eğer sıranın değere göre değil de değerlerin anahtarına (burada ogr_01, ogr_02 olan kelimeler) göre yapılmasınıistiyorsak, ksort() fonksiyonunu kullanırız.
Örnek:
$birinci_dizi = array ( ogr_01=>”Özbay”, ogr_02=>”Muharrem” , ogr_013>”Hasan” , ogr_04=>”şahika”);
ksort ($birinci_dizi);
PHP, şimdi bu diziyi anahtarlara göre alfabetik sıraya sokacaktır.
Metin Düzenleme ve Düzenli İfadeler
substr($degisken,8);
substr ($degisken, 8, 20);
substr($degisken, -9);
trim ($degisken);
strlen($degisken);
strip_tags($metin)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â =>> (Metin içersindeki html ve php kodlarınıatar)
strtolower($metin)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â =>> (Küçük harfe çevirir)
strtoupper($metin)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â =>> (Büyük harfe çevirir)
ucwords($metin)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â =>> (Sadece Baş Harfleri büyük yapar)
ucfirst($metin)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â =>>(Sadece cümlenin baş harflerini büyük yapar)
substr($metin,3,5)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â =>>(3. karekterden itibaren 5 karekter alır)
strpos($metin,â€@â€)             =>>(İstediğim karekterin yerini söyler)
strstr($metin,â€@â€)               =>>(İstediğim karekterden sonraki karekterleri alır)
substr_count($metin,â€@â€)  =>> (İstediğim karekterden kaçtane olduğunu yazar)
$bolumler=explode(“,â€,$metin)      =>> ( (,) ler arasındaki ifadeleri dizi değişkenine aktarır)
implode(“,â€,$bolumlarâ€)                 =>> ( Dizideki değerleri (,) işareti ile bağlar)
                           Â
                            printf() ve sprintf()
Bu fonksiyonlarıbir değişkeni biçimlendirmekte kullanırız. Birincisinin elde ettiği sonuç ziyaretçinin Browser penceresine gönderilir; ikincisin elde ettiği sonuç ise değer olarak döner. Önce bu fonksiyonlarla kullanabileceğimiz biçim parametrelerini sıralayalım:
% Â Â Â Â Â Â Â Â Â Â Â Â Â Yüzde işareti. Yanında biçim parametresi gerekmez.
b                Değişken tamsayıolarak işlem görür ve ikili sayıolarak döner.Â
c                Değişken tamsayıolarak işlem görür ve ASCII değerinin karşılığıolan karakter olarak döner.
d                Değişken tamsayıolarak işlem görür ve ondalık sayıolarak döner.
f                 Değişken kesirli sayıolarak işlem görür ve kesirli sayıolarak döner.
o                Değişken tamsayıolarak işlem görür ve sekiz-tabanlı(octal) sayıolarak döner.
s                Değişken alfanümerik olarak işlem görür ve alfanümerik olarak döner.
x                Değişken tamsayıolarak işlem görür ve 16 tabanlı(hexadecimal) sayıolarak döner. (Harfler, küçük harf olur).
X Â Â Â Â Â Â Â Â Â Â Â Â Â Â Değişken tamsayıolarak işlem görür ve 16 tabanlı(hexadecimal) sayıolarak döner. (Harfler, büyük harf olur).
Her iki fonksiyonun da kullanılış biçimi aynıdır:
printf( “biçim” , $degisken1, $degisken2, … “metin” );
Burada “biçim” yerine yukarıdaki biçim parametlerini yazarız. Biçim parametrelerinin önüne yüzde işareti konur; en fazla beş belirleyici özellik alabilir. Yukarıdaki tür belirten biçimlendirme parametlerine ek olarak diğer özellikler şöyle sıralanır:
Doldurma karakteri: tek tırnak ve onu izleyen bir karakterden oluşur.
Hizalama: Eksi işaretinin varalığıyazının sola, yokluğu ise sağa hizalanma anlamına gelir.
En az-en çok uzunluk: Sayı-nokta-sayı(örneğin 40.40 gibi) yazılır; birinci sayıazamî, ikinci sayıasgarî uzunluğu belirtir.
Bu üç özelliğe bir örnek verelim.Bir değişkenin değerinin sonuna yanyana yeteri kadar nokta konarak uzunluğunun 40 karaktere çıkartılmasınışu deyimle sağlarız:
$degisken = ” İyilik üzerine ” ;
printf( “%’.-40.40s” , $degisken);
Burada “%’.-40.40s” şeklindeki biçim komutu, Browser penceresinde şu görüntüyü oluşturur:
“İyilik üzerine……………………..”
Burada “İyilik üzerine” değeri 14 karakter olduğu için, sonuna 26 adet nokta eklenmiş ve bütün değer sola hizalanmış olacaktır. şu komut ise iki değişkenin değerini ve vereceğimiz bir metni aynısatıra yazdıracaktır:
$degisken1 = ” İyilik üzerine ” ;
$degisken2 = ” İyilik üzerine ” ;
$metin = “<br>\n” ;
printf( “%’.-40.40s%’.2d%s” , $degisken1, $degisken2, $metin);
Bu komut Browser penceresinde şu görüntüyü oluşturur:
“İyilik üzerine……………………..86″
Burada eklediğimiz ikinci “%’.2d” şeklineki biçim komutu ile, ikinci değişkenin değeri, en az sıfır en çok iki adet nokta ile doldurulmak ve sağa hizalanarak ondalık sayıolarak görüntülenmek üzere biçimlendiriliyor. Üçüncü biçim komutu olan “%s” ise üçüncü değişkenin sadece alfanümerik olarak muamele görmesini sağlıyor. Biçim komutlarının arasında boşluk bulunmaması, ait olduklarıdeğişken değerlerinin de aralarına boşluk konmamasına sebep oluyor. Üçüncü değişkenin etkisini, kağıt üzerinde göremiyoruz; ancak bu Browser penceresinde bundan sonra gelecek unsurların bir satır aşağıkaymasınısağlayacaktır.
Dördüncü biçim özelliği, ondalık sayıların virgülden (veya nokdtadan) sonra ondalık bölümünün kaç hane olacağınıbelirler. Bunu da bir örnekle görelim:
$degisken = ” 124 ” ;
printf( “Değeri (ABD) $%.2f” , $degisken);
Bu biçimlendirme komutu da Browser penceresine şu yazıyıyazdırır:
Değeri (ABD) $124.00
                           Â
str_replace ()
str_replace(”<script”,”<yasak_script”,$satir[mesaj]);
number_format()
$degisken = 1234567890.1234567890 ;
echo (number_format($degisken, 4 chr(44) , “.”) ); //chr(44)=virgü
Bu deyimle 1234567890.1234567890 şeklindeki değer, Browser penceresine “1.234.567.890,1235″ şeklinde yazdırılacaktır.
Düzenli İfadeler
işaretlerinin, Düzenli İfade işlemlerine ait olduğunu belirtilim. Bu işaretler ve onların arasına koyduğumuz karakter örnekleri ile, PHP’nin aradığımız bir metnin karakterlerinin hangi diziliş, sıralanış konumunda olduğuna bakarak, bize o metni bulmasınısağlarız; ya bu metni kullanırız, sileriz veya değiştiririz. Dolayısıyla, Düzenli İfade demek, bir diziliş, sıralanış biçimi demektir.
Eşleştirme deyimleri ve işaretler
PHP’nin karakter ve sıralanış eşlemede kullanılan düzenli ifade komutlarınıkısaca ele alalım; sonra bunlarıkullanmamıza imkan veren fonksiyonlarıgörelim.
^hakk
“hakk” ile başlayan bütün kelimeleri bulur.
edilemez$
Bu deyim ise PHP’ye “edilemez” ile biten bütün kelimeleri bulur
^hakkı$
PHP, başında ^ işareti, sonunda $ işareti bulunan kararter sıralanışını, aynen arar; yani bu deyim, birinci örnekteki üç cümleyi de bulamaz.
Hakk
Bu deyim ise her üç cümleyi de buldurur; çünkü üçünde de bu dört karakter bu sıralanışla mevcuttur. PHP’nin Düzenli İfadeleri, bütün rakam ve harfleri eşleştirebilir. Fakat sorun, özel karakterlerde çıkar. Sözgelimi, sekme işareti, satır sonlarında yeni-satır/satırbaşıişareti, gibi özel karakterleri, ancak önlerine Escape işareti olan ters bölü işaretini koyarak buluruz.
Düzenli İfadelerde Özel Karakterler
[\b]Â Â Â Â Â Â Â Â Â Â Geri (Backspace) karakterini bulur.
\b            Belirtilen karakterle sınırlanan kelimeyi bulur: k\b, “hak mücadelesi” ifadesindeki birinci k’yıbulur; çünkü bu harf, bir kelime sınırlayıcıdır.
\BÂ Â Â Â Â Â Â Â Â Â Â Â Belirtilen karakterle sınırlanmayan kelime yoksa, başlayanıbulur: k\Bi, “üç kişi” ifadesindeki ‘ki’yi bulur.
\cX          X yerine yazacağımız kontrol karakterini bulur. Örneğin, \cA, Ctrl+A’yı, \cZ ise Ctrl+Z’yi bulur.        Â
\d            0′dan 9′ya kadar bir rakamıbulur: IE\d, her ikisi de herhangi bir rakamla biten “IE5″ ve “IE4″ değerlerini ikisini de bulur,
\DÂ Â Â Â Â Â Â Â Â Â Â Herhangi bir ondalık işaretini bulur.
\f             Form-feed (kağıt çıkart) karakterini bulur.
\n            Newline (yeni satır) karakterini bulur.
\r             Return (satırbaşı) karakterini bulur.
\s             Boşluk (space) bulur.
\SÂ Â Â Â Â Â Â Â Â Â Â Â Yatay ve düşey sekme, kağıt-çıkart, yeni satır, satırbaşıve boşluk dışındaki herhangi bir karakteri bulur.
\t             Yatay sekme (Tab) karakterini bulur.
\v            Düşey sekme karakterini bulur.
\w            Herhangi bir harf, rakam veya alt-çizgiyi bulur.
\WÂ Â Â Â Â Â Â Â Â Â Â Harf, rakam ve alt-çizgi dışındaki karakteri bulur.
\xHex     Verilen 16 tabanlı(Hexadecimal) sayıya uygun Escape karakterini bulur. Örneğin, \n25, % işaretini bulur.                           Â
Bu arada noktalama işaretlerini arattırırken, önlerine ters bölü işareti koymak gerekir. Ters bömü işaretini de yine önüne ters bölü işareti koyarak (\\) arttırabilirsiniz.
Karakter Grupları
PHP’nin Düzenli İfadeleri’nde kolaylık sağlayan ve mesela ziyaretçinin bir Form’da bir INPUT etiketine verdiği yanıtıların içinde olmamasıveya olmamasıgereken karakterleri bulmamıza imkan veren karakter gruplarıoluşturma yöntemini de kullanabiliriz. Sözgelimi bütün sesli hafleri aratmak için şöyle bir karakter grubu oluşturabiliriz:
[OoUuÖöAaOoEeıIiİ]
Karakter gruplarınıköşeli parantez içinde yazarız. Bu deyimle, PHP, içinde herhangi bir sesli harf bulunan bütün değerleri eşleştirecektir. Bu yöntemden yararlanarak, şu gruplarıkullanabiliriz:
[a-z]Â Â Â Â Â Â Â Â Â Â Â Â Â Herhangi bir küçük harfi bulur.
[A-Z]Â Â Â Â Â Â Â Â Â Â Â Herhangi bir büyük harfi bulur.
[a-zA-Z]Â Â Â Â Â Â Â Herhangi bir büyük veya büyük harfi bulur.
[0-9]Â Â Â Â Â Â Â Â Â Â Â Â Herhangi bir rakamıbulur.
[0-9\.\-]Â Â Â Â Â Â Â Â Herhangi bir rakamı, noktayıveya kesme çizgisini bulur.
[ \f\r\t\n]       Herhangi bir Form-feed (kağıt çıkart), Newline (yeni satır), Return (satırbaşı) karakterini veya boşluğu (space) bulur.
Sözgelimi, bir alfanümerik değer kümesinde b3, u2, n9 gibi birincisi küçük harf, ikincisi rakam olan iki karakterlik dizileri bulmak istiyorsak, arama grubunu şöyle kurarız:
^[a-z][0-9]$
Bu deyim PHP’ye, a’da z’ye küçük harfle başlayan, (^işareti aranan unsurun değerin başında olmasıgerektiğini söylüyor) ve sonunda 0′dan 9′a bir rakam bulunan kelimeleri bulmasınısöyleyecektir. PHP, bu kelimenin sadece iki harfli olmasına dikkat edecektir; çünkü grubumuzun bir başıve bir de sonu belirlendiğine göre, üç karakterli değerlerin bulunmasıimkanıyoktur.
^ işareti köşeli parantez içinde grup deyimi oluştururken kullanılırsa, bu olumsuzluk anlamıtaşır. Sözgelimi, iki rakamlıancak birinci karakteri rakam olmayan fakat ikinci karakteri rakam olan değerlerin bulunmasıiçin şu deyim gerekir:
^[^0-9][0-9]$
Burada en baştaki ^işareti “başında” demektir; ancak hemen arkasından gelen grupta “rakam olmayan” demiş oluyoruz; ikinci grup ve sonundaki $ işareti ile “rakamla biten” anlamına geliyor. Deyimde sadece baş ve sonu gösteren iki eşleştirme unsuru bulunduğuna göre bu deyim, “başında rakam olmayan, sonunda rakam olan iki karakterli değerleri” bulmaya yarayacaktır. Bu deyim söz gelimi 13′ü bulmayacak, fakat u2′yi bulacaktır. Bu yöntemle şu gruplarıyapabiliriz:
[^a-z]Â Â Â Â Â Â Â Â Â Â Â Küçük harf olmayan herhangi bir harfi bulur.
[^A-Z]Â Â Â Â Â Â Â Â Â Büyük harf olmayan herhangi bir harfi bulur.
[^\\\/\^]Â Â Â Â Â Â Â Â \ , / veya ^ dışında herhangi bir karakteri bulur.
[^\”\’]Â Â Â Â Â Â Â Â Â Â Çift ve tek tırnak dışında herhangi bir karakteri bulur.
Grup oluşturmada kullandığımız özel karakterler de vardır. Örneğin nokta işareti (.), yeni satır başlangıcıolmayan herhangi bir karakter anlamına gelir. Dolayısıyla,
^.0$
deyimi yeni satırla başlamayan ve sıfır ile biten herhangi iki karakterli değeri bulacaktır.
Karakter eşleştirmede tekrar sayısıda bir özellik olarak kullanılabilir. Tekrar sayısıbelirtmek için süslü parantez ({}) kullanırız.
Örnekler:
^a{4}$                       İçinde sadece dört adet küçük a harfi bulunan kelimeleri seç: aaaa.
^a{2,4}$                    İçinde sadece iki üç veya dört adet küçük a harfi bulunan kelimeleri seç: aa, aaa, aaaa gibi
^a{2, }                       İki veya daha fazla küçük a harfi bulunan kelimeleri seç: haar, haaar, haaaar gibi. Bu deyim “har” kelimesini seçmez.
\t{2}Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Ardarda iki sekme işaretini bul
.{2}Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Herhangi çift karakteri bul: aa, &&, == gibi
^\-{0,1}[0-9]{1,}$Â Â Â Â Â Â Negatif veya pozitif herhangi bir tam sayıyıbul
^[0-9]{1,}$Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Pozitif herhangi bir tam sayıyıbul
Bu tür deyim oluşturma işlemleri giderek karmaşıklaşabilir. Örneğin:
^\-{0,1}[0-9]{0, }\.{0,1}[0-9]{0, }$
Bu karmaşık deyim aslında sadece “Negatif veya pozitif bir ondalık (double) değeri bul,” anlamına geliyor. Kısaca irdelersek, aranan degerin sıfır veya bir kere tekrarlanan bir kesme çizgisiyle başlayabileceğini (”Sıfır veya bir kere” demek, olsa da olur, olmasa da anlamına geliyor!) bunu sıfır veya daha fazla kere tekrarlanan bir rakamın izleyebileceğini, onu da sıfır veya bir kere tekrarlanan bir nokta işareti ile sonunda sıfır veya daha fazla kere tekrarlanan herhangi bir rakamın izleyebileceğini söylemiş oluyoruz.
PHP bu tür karmaşık ifadelerin hatasız yazılmasınısağlayan kısayollara sahiptir. Bunlarısıralayalım:
? Â Â Â Â Â Â Â Â {0,1} anlamına gelir. Kendisinden önce yer alan unsurun en az sıfır en çok bir kere tekrar edilmesi gerektiğini (olmayabileceğini ama olursa en fazla bir kere olabileceğini) belirtir.
*Â Â Â Â Â Â Â Â Â {0, } anlamına gelir. Kendisinden önce yer alan unsurun sıfır veya daha fazla kere tekrar edilmesi gerektiğini (tümüyle opsiyonel olduğunu) belirtir.
+Â Â Â Â Â Â Â Â Â {1, } anlamına gelir. Kendisinden önce yer alan unsurun en az bir veya daha çok kere tekrar edilmesi gerektiğini (bulunmasının zorunlu olduğunu) belirtir.
Bu kısa-yollarıkullanarak, yukarıdaki karmaşık ifadeleri basitleştirelim:
^[a-zA-Z0-9_]+şÂ      En az bir harf veya rakam veya altçizgi içeren herhangi bir kelime
^[0-9]+şÂ                              Herhangi bir pozitif tamsayı
^\-?[0-9]+şÂ                         Herhangi bir tamsayı
^\-?[0-9]*\.[0-9*$]+şÂ          Herhangi bir kesinli (double) sayı
Bir Düzenli İfade’nin yazılışında birden fazla arama-sıralanış deyimine yer verebiliriz. Bunu yapmamızısağlayan | işaretidir. Örneğin,
\.com|\.co\.uk
ifadesi ile, ya “.com” ya da “.co.uk” değerlerinin bulunmasınısağlayabiliriz. Burada | işareti “veya” kelimesi gibi düşünebilirsiniz.
Düzenli ifadeler yoluyla INPUT etiketinden gelen değerleri incelerken hata yapmak kolaydır. Bunun için kendi ifadelerinizi mutlaka sçeşitli olasılıklara karşısınamalısınız. Bu bölümün başında örnek olarak verdiğimiz Düzenli İfade’yi hatırlıyor musunuz?
^.+@.+\\..+$
Örneğin bu ifade, ziyaretçinin elektronik posta adresini yazmasıgereken bir INPUT etiketinin sağladığıdeğerin gerçekten elektronik adres biçimi taşıyıp taşımadığınısınar. Baştaki ^ ve nokta işaretleri ile artıişareti değerin önünde boşluk olmamasınısağlıyor; @ işareti ise değerin içinde @ bulunmasıgerektiğine işaret ediyor. Tekrar eden nokta ve artıişaretleri “ne kadar olursa olsun ve ne olursa olsun” anlamına geliyor. Bunu izleyen nokta karakterini gösteren (\.) işaret buralarda bir de gerçekten nokta olmasıgerektiğini ve bunu izleyen nokta ve artıtekrar “ne olursa olsun, ne kadar olursa olsun” anlamınıtaşıyor. Başka bir deyişle, aradığımız değerin “herhangi bir şey” @ “herhangi bir şey daha” . “birşeyler daha” şeklinde olduğunu belirtmiş oluyoruz. Ne var ki deyimiçinde iki nokta veya iki @ işareti olan veya @ işareti ile nokta arasında bir şey bulunmayan veya @ veya noktadan öncesi ya da sonrasıboş olan bütün değerleri safdışıetmeye yetmeyecektir.Â
Düzenli İfade Fonksiyonları
Yukarıda öğrendiğimiz Düzenli İfade yazma tekniklerini, PHP’nin bize sağladığıbeş fonksiyonda parametre olarak kullanırız. PHP’nin ayrıca Perl-tarzıdüzenli ifade fonksiyonlarıda vardır. Bu fonksiyonlardan, ya bize bir boolean (doğru/yanlış) değer döner; ya da fonksiyon istediğimiz işi yaparak vardığısonuçlarıverdiğimiz değişkene yazar. Biz, daha sonra bu değere bakarak veya değişkenin değerlerini kullanarak, PHP programımızın akışınıkontrol edebiliriz. Burada ele alacağımız fonksiyonlara ilişkin örneklerde, daha önceki bölümlerde oluşturduğumuz konuk defteri programıile Web ziyaretçilerimizin sunucuya göndereceği bilgileri doğrulamaya ve muhtemel zararlıkodlardan ayıklamaya çalışacağız.
                           Â
             ereg() ve eregi()
PHP’nin temel Düzenli İfade Fonksiyonu, ereg(), arattığımız karakter sıralanışıbulunduğu taktirde doğru, bulamadığıtaktirde yanlış karşılığıbir değer verir. Fonksiyonu şöyle yazarız:
$bir_degisken = ereg(”eşleştirilecek_sıra” , $kaynak , $yeni_değişken);
Fonksiyonun aradığımız eşleştirmeyi yapmasıhalinde, buradaki $bir_degisken’in değeri true/doğru, yapamamasıhalinde false/yanlış olacaktır. Eşleştirme sırasının nasıl oluşturulduğunu yukarıda gördük; bu ifadelerden işimize uygun olanıburaya tırnak içinde yazarız. $kaynak, eşleştirilecek sıralamanın içinde aranacağıdeğeri tutan değişkendir. Fonksiyonun bir diğer becerisi, eğer eşleştirilecek sıralamayıgruplar halinde verirsek, kaynakta yapacağıeşleştirme olursa, buna uygun değerleri bir dizi değişkene yazabilmesidir; istersek bir parametre olarak bu yeni değişkenin almasınıistediğimiz adıveririz; böylece eşleştirme sonucu bulunan değerler kaydedilmiş olur.
eregi(), aynen ereg() fonksiyonu gibi çalışır; sadece eşleştireceği değerlerde büyük-harf/küçük-harf farkıgözetmez.
Daha önceki bölümde oluşturduğumuz ve kd_01.php adıyla kaydettiğimiz konuk defteri programının akış planını, ziyaretçinin Form’a yazdığıve sunucuda $HTTP_POST_VARS dizi-değişkeninde tutulan değişkenlerinden elektronik posta adresi ilge ilgili olanıgerçekten içinde en az bir @ işareti ile en az bir adet nokta içip içermediğine bakarak sınayabiliriz. Böyle bir sınama için gerekli kod şöyle olabilir:
if (eregi(”^.+@.+\\..+$”, $adres, $email)) {
           }
           else { Â
           $hata = “Elektronik posta adresinizde bir hata var!<br>”;
                                  echo $hata;
                                  include(”kd_hata_halinde.htm”);
                                  exit;
           }
Program, bu örnekte $adres değişkeninde kayıtlıdeğerin içinde aradığısıralamayıbulursa, eşleşen değeri $email adlıyeni bir değişkene yazacak ve if sınavının sonucu doğru olacaktır. Bu sıralamaya uygun bir değer bulunamazsa, if sınavıelse deyimine atlayacak ve bir hata mesajıüretilerek, bu program durdurulacaktır.
ereg_replace() ve eregi_replace()
Gördüğümüz gibi, ereg() arattığımız karakter sıralanışıbulunduğu taktirde doğru, bulamadığıtaktirde yanlış karşılığıverdikten sonraduruyor! Oysa kimi zaman arattığımız ve bulunan değerin başka bir değierle değiştirilmesi gerekebilir. Bunun için ereg_replace() ve eregi_replace() fonksiyonlarınıkullanırıız:
ereg_replace(”eşleştirilecek_sıra” , yeni_metin , $kaynak);
Fonksiyonun aradığımız eşleştirmeyi bulursa, bu değerin yerine verdiğimiz yeni metni koyacaktır; yeni metni bir değiş