PHP Programlama
February 09, 2012 Thursday

ARİTMETİK OPERATÖRLER
         Yukarıdaki örnekleri yaparken, = işaretini bol bol kullandık ve böylece PHP'nin bir çok operatöründen biriyle tanıştık. Buna PHP dilinde "atama operatörü" denir. Bu işlemci sadece yukarıda kullandığımız gibi, bir değişkenin bir değere eşitliğini ilan etmek amacıyla kullanılmaz. Örneğin:

print ( $sayi = 123 ) ; 
ifadesinde olduğu gibi, bir fonksiyonun içinde de hem atama işlemi yapılabilir; hem de işlem yürütülür. PHP'nin aritmetik, birleşik-atama, birleştirme, karşılaştırma ve mantıksal sınama operatörleri vardır.

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
         Aritmetik işlemleri gerçek sayılarla yaptığımız gibi, tuttuğu değer sayı olan değişkenlerle de yapabiliriz.

         Daha önce, PHP'de değişken tanımlar ve bunlara değer atarken sayı olan değişkenleri tırnak işareti kullanmadan, alfanümerik değişkenleri ise tırnak içinde yazmıştık. PHP, tırnak kullanmasanız da bir değişkenin sayı olup olmadığını anlar; daha sonra bu değişkenlerle aritmetik işlem yapabilir. PHP ayrıca rakamla başlayan alfanümerik değişkenleri sayı olarak kullanmaya kalktığınızda, bu değerin başındaki bütün rakamları sayı olarak kabul eder. PHP açısından harf veya işaretle başlayan alfanümerik değişkenlerin sayı olarak değeri sıfırdır. Örnek:

$a = 6;
$b = "22/A";
print ($a + $b);
sonuç olarak 28'i verecektir; veya

$a = 6;
$b = "A/22";
print ($a + $b);
sonuç olarak 6 çıkacaktır.  Bu küçük deneyi yaparsanız, PHP ile program yazarken hangi değişkenin ne sonuç vermesi gerektiğini dikkatle düşünmek zorunda olduğunuzu görürsünüz.

         Bununla birlikte elimizde bir kişinin adı ve soyadı ayrı değişkenler halinde ise, bunları birbirine ekleyerek (concatenation) ortaya yeni bir alfanümerik değişken çıkartabiliriz:

<?php
         $adi = "Reşit";
         $soyadi = "Muhtar";
         $adi_soyadi = $adi . " " . $soyadi;
         print ("<br>");
         print ($adi_soyadi);
         print ($adi . "'nın soyadı " . $soyadi . "'dir.")
?>
Bu örnekte, sadece ekleme yoluyla yeni bir değişken oluşturmakla kalmıyoruz; fakat alfanümerik değişkenleri, başka metinlerle de birbirine ekleyebildiğimizi görüyoruz. Bu işlemi nokta işaretiyle (.) yapıyoruz. Bu işlemciyle sadece değişkenlerin değerlerini değil fakat metinleri de birbirine ekleyebiliriz:

<?php
print ("Merhaba " . "..." . "Arkadaşlar! ")
?>
         PHP'nin atama işlemcisi eşittir (=) işareti demiştik, 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"
         Bu işlemi zihnimizde, "A değişkeninin mevcut değerine 5 ekle, çıkan sonucu A değişkenin yeni değeri yap!" şeklinde canlandırabiliriz.

Bir Arttırmak veya Azaltmak

         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.

         ++ veya -- işaretinin değişken adından önce veya sonra olmasının sonucu farklı olur. İşaretler değişkenin adından önce ise PHP önce değişkenin değerini bir arttırır veya eksiltir, sonra bu yeni değeri işleme katar; işaretler değişken adından sonra ise, PHP değişkenin o andaki değerini işleme kadar, sonra değeri bir arttırır veya 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. Söz gelimi, değeri 6 olan değişkenin 5'ten büyük olup olmadığını sınarsak, sonuç doğru; 5'ten küçük olup olmadığını sınarsak sonuç yanlış çıkacaktır. PHP'nin karşılaştırma işlemcileri şunlardır:

İşlemci Anlamı Ö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ğru/True
< küçükse $a < 5 Yanlış/False
<= küçükse veya eşitse $a <= 5 Yanlış/False
>= büyükse veya eşitse $a >= 5 Doğru/True
         PHP'nin karşılaştırma işlemcileri hem tam ve ondalık sayı türü değerlerle, hem de alfanümerik değerlerle kullanılabilir.

         Daha ileri aşamalarda, bazen değişkenlerimizin karşılaştırmasının bu kadar basit olamayacağını; kimi zaman iki grup değişkenin karşılaştırılması gerektiği durumların bulunduğu göreceğiz. Diyelim ki, bir öğrencinin başarılı sayılması için hem vize notunun, hem de yılsonu sınav notunun belirli sayılardan büyük olması gerekiyor. Bu durumu ancak karmaşık-mantıksal sınamadan geçirmemiz gerekir. Bu sınamayı iki ayrı sınama sonucu ile birlikte kullanırız. Örneğin:

vize notu yeterli  - final notu yetersiz = kalır  (yanlış/false)
vize notu yeterli - final notu yeterli = geçer (doğru/true)
         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ı İşlem Yönü Ö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ğa doğru doğru || yanlış =  doğru
! Değil sol veya sağ yanlış doğru || yanlış =  doğru
         "veya" ve "ve" sınamaları için iki ayrı işlem işareti bulunmasının sebebi, PHP'nin işlem sırasıyla ilgilidir. Şimdi, kavranması kolay olmayan ikili mantıksal sınamalara bir örnek verelim; yukarıda öğrencinin durumunu PHP komutu olarak yazalım.

<?php
     $vize = 45;
     $final = 65;
     if ($vize >= 50 && $final >= 50) 
     {
         print ("Öğrenci geçti!");
     }
     else 
     {
         print ("Öğrenci kaldı!");
     }
?>
       Mantıksal karşılaştırma işlemleri daha da karmaşık olabilir. Örneğin, öğrencinin geçmiş sayılması için yılsonu vize ve final notlarının 45'dan yüksek, ve ya birinci sömester notunun ya da vize ve final notlarının ortalamasının 65'den yüksek olması şartı aranabilir. Bu durumda kodu şöyle yazmamız gerekirdi:

<?php
     $vize = 45;
     $final = 65;
     $ilk_sem = 45; 
     $ortalama = ($vize + $final) / 2;
     if (($vize >= 45 && $final >= 45) and ($ilk_se >= 65 || $ortalama >= 65)) 
     {
         print ("Öğrenci geçti!");
     }
     else 
     {
         print ("Öğrenci kaldı!");
     }
?>
Burada, PHP önce || veya && işaretinin sonucunu bulacak sonra and veya or işlemcisinin gereğini yapacaktır.

         İşlem önceliği deyince.. Bütün programlama dilleri gibi PHP için de işlemlerin hangi sırada yapıldığı önem taşır. "5 + 4 * 2" işleminin sonucu, önce 5 ile 4'ün toplanması ve sonucun 2 ile çarpılması halinde başka, 4'ün 2 ile çarpılması ve sonucun 5 ile toplanması halinde başka olacaktır. Bu bakımdan, PHP'nin hangi işlemi önce yaptığı, hangi işlemi sonra yaptığını bilmemiz gerekir. PHP'deki işlemlerin yapılış sırası şöyledir:

  1. ++ ve --

  2. /  *   %

  3. +  -

  4. <  <=   =>  >

  5. ==  ===  |  =

  6. &&

  7. ||

  8. =  +=  -=  /=  %=  .=

  9. and

  10. xor

  11. or

  12. r.

Sabit Değerler

         İster Web, ister Web-dışı amaçlı olsun, bir programın bazen başındanh sonuna kadar değeri değişmeyen değişkene ihtiyacı olabilir. PHP'de sabit değerler, Script boyunca değişmeden kalır.

         Sabit değerler, değişkenlerden farklı şekilde oluşturulur. Bunun için PHP'nin define() fonksiyonunu kullanırız. Bu fonksiyonun yazım kuralı şöyledir:

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);
?>
         Burada tanımladığımız DOLAR_KURU sabit-değeri, tıpkı bir değişken gibi kullanılabilir. Fakat bir sabit değeri tanımladıktan sonra içeriğini değiştiremezsiniz. Sabit değer ile aynı ismi taşıyan değişken oluşturmak mümkündür; ancak aynı ismi taşısa da bir sabit ile değişkeni (birinin adının önünde $ işareti bulunduğu için) karıştırmak kolay olmasa gerek.

         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>");
     }
     define ( "DOLAR_KURU", 625675);
     $TL_Tutar = $Dolar_miktar * DOLAR_KURU;
     print ($TL_Tutar);
?>
         Bu programı, bu şekilde ve define() komutunu en üst satıra alarak çalıştırırsanız, ikinci çalıştırışınızda programın sabit değeri yeniden oluşturmayı reddettiğini görecektiniz. Sabit değerleri, Web sitesinde ziyaretçilerin girdiği verilerden alarak kendiliğinden oluşturan bir program yazdığınızda, defined() fonksiyonu mantıksal hata yapmanızı önler.

         PHP'nin kullanılmaya hazır bir kaç sabit değeri vardır. True (doğru) değeri 1 olan, False (yanlış) ise değeri sıfır sayısı veya boş alfanümerik olan iki sabittir. Diğer sabitler şunlardır:

__FILE__ O anda çalışmakta olan PHP dosyasının adı (kelimenin önünde ve sonunda iki alt-çizgi var);
__LINE__ Bu ifadenin yer aldığı satırın sayısı (kelimenin önünde ve sonunda iki alt-çizgi var);
PHP_VERSION PHP'nin sürümü (İki kelimenin arasında bir alt-çizgi var);
PHP_OS   PHP'nin çalıştığı işletim sistemi (İki kelimenin arasında bir alt-çizgi var);
         Bunlara ek olarak, E_ERROR, E_WARNING, E_NOTICE ve E_PARSE şeklinde hata durumunda hatanın çeşitli özelliklerini bildiren sabit değerleri de kullanabiliriz.

         PHP hakkında çok daha geniş bilgiyi phpinfo() fonksiyonunu çağırak alabilirsiniz.

Tarih ve Saat Verisi

         PHP, o andaki zaman bilgisini, saat, dakika, saniye ve  salise olarak; tarih bilgisini yıl, ay, gün (sayı veya isim olarak), programımızın herhangi bir yerinde bize bildirebilir. Bu bilgiyi Web sunucusunda istediğimiz anda, muhtemelen sunucunun bulunduğu bilgisayarın sistem saatinden alacak olan PHP, sunucu programında farklı bölgesel ayarlar için gerekli düzenleme yapılmışsa, bu imkandan yararlanarak bize sunucunun değil, arzu ettiğimiz bölgenin saat ve tarihini bildirebilir.

         Özellikle Türkiye'de olmayan bir sunucuda bu imkanın bulunup bulunmadığını, ancak sınayarak veya sistem yöneticisine sorarak öğrenebiliriz. Böyle bir sınama için şu kodları programınızın başına koyun:

<?php 
    setlocale ("LC_TIME", "TR");
    print (strftime ("Türkçe bugün günlerden: %A "));
?>
Browser penceresinde "Türkçe bugün günlerden Sunday" yazısını okursanız, sunucuda Türkçe için bölgesel ayar desteği yok demektir.

PHP'nin zaman ve tarih belirlemekte kullanabileceğiniz başlıca fonksiyonu getdate() ise şxöyle kullanılır.

getdate()      Tarih ve saat bilgisini alır ve ve vereceğiniz bir isimdeki dizi-değişkende kaydeder. Örnek:

$saat_tarih = getdate()
         Bu durumda, $saat_tarih dizi değişkeninde sırasıyla şu bilgiler yer alır:

32 saniye
57 dakika
6 saat
30 ayın gün sayısı (1-31)
0 haftanın gün sayısı (1-7)
7 ayın sayısı (1-12)
2000 yıl
211 yılın kaçıncı günü
Sunday günün adı
July Ayın adı
964929452 Unix sistemlerinde Epoch biçiminde zaman bilgisi
         PHP'nin tarih ve saat bilgisini biçimlendirmede yararlandığımız date() fonksiyonunu daha sonra metin biçimlerdirme bölümünde ele alacağız.