22 Temmuz 2015 Çarşamba

10-) PHP Komutlar ve Döngüler


Programın çalışması esnasında birkaç farklı alternatif durum arasından seçim yapmamız, bazı komutları birden fazla tekrarlamamız, mantıksal kararlar vermemiz ya da istenmeyen hataları önlemek amacıyla programımıza müdahale etmemiz gerekebilir.Bu gibi durumları kontrol altına almak amacıyla kontrol yapılarını ve döngüleri kullanıyoruz.

IF

if (yapılmasını istediğimiz koşul){

Yapılmasını istediğimiz koşulun doğru olduğunda işlenecek kodlar

}
Yapılmasını istediğimiz koşul mantıksal değeri üzerinden değerlendirilir. Sonuç TRUE ise, PHP deyimi çalıştırır, FALSE ise gözardı eder.
Hangi ifadeler FALSE olur ?
  • ·         İnteger 0 (sıfır)
  • ·         Float 0.0  (sıfır)
  • ·         Boş string ve  string “0”
  • ·         Hiç elemanı olmayan dizi
  • ·         Hiç üye değeşkeni olmayan nesne
  • ·         NULL türü
Örnek: Saat 20’den az ise gerçekleşir. 


Sonuç:

 

Örnek: Üye ismi boş olup olmadığını kontrol ediyor.



Sonuç:   



Örnek: Sayının 2’ye bölümünden kalan 1 ise ekrana Sayı=8 yazar.




Sonuç:   

     Sayı=8

Bir şeye dikkat edecek olursak parantezler kullanılmadığından if altında sadece $sayi++; komutu çalışmaktadır. echo komutu her halükarda çalışacaktır.

ELSE
Çoğu zaman belli bir koşul sağlandığında bir deyimin, o koşul sağlanmadığında başka bir deyimin çalıştırılmasını isteyeceksiniz. Bunun için else kullanılmaktadır. Else, bir if deyimini FALSE döndürdüğü takdirde bir deyim çalıştırmak üzere genişletir.
İf (şart ifadesi)   {
şart ifadesine bağlı yapılacaklar
 }else {
şartlar sağlanmazsa yapılacaklar
}
Yazım şekli yukarıda olduğu gibidir. Öncelikle “if” diyerek parantez içerisinde şart belirtilir, şart sağlanmazsa else kısmı çalışacaktır.



Örnek: Değişkenlere ilk değerleri verilip karşılaştırıyor.





Sonuç:


Örnek: Aşağıdaki kod bloğu çalıştırdığımızda, if koşullarının sağlandığı için ilk satır kodun çalıştığını göreceğiz. Gördüğünüz gibi iki şartı, ‘ve’ anlamına gelen  ‘&&’  ile birleştirdik. Şartımız  $sayi değişkenine atadığımız değer 90’dan ve 80’den büyük mü?
 Büyük ise; Ekrana "$sayi koşullar göre her iki sayıdan büyüktür." yazsın.
 Küçük ise; Ekrana "Koşullardan birisi veya ikisi de sağlanamamıştır." yazsın.

 


Sonuç:

 


Örnek: $sifre =1453 ve $uye= Seyma şartı doğru ise “Doğru giriş yaptınız ” yanlış ise “Giriş Hatalı ” yazsın.

 


Sonuç: 

   

Örnek: Tanımlı olan sayı pozitif ise sayının kendisini ve karesini, değilse "Sayı pozitif değil." Mesajını ekranda gösterelim.


 


Görüldüğü üzere if’den sonra çalışmasını istediğimiz iki tane komut olduğundan { } parantezlerini kullandık. else’den sonra ise tek komut olduğundan { } kullanmadık. Ayrıca tek bir koşula göre işlem yapacağımız için elseif kısmını da kullanmadık. 

Sonuç:

 

Örnek: Ekranda true için 1, false için bir şey görünmeyecektir.


 


Sonuç:

             1

ELSEIF 

elseif isminden de anlaşılacağı gibi, if ve else deyimlerinin birleşmesi ile oluşur. else gibi, orijinal if ifadesinin FALSE döndürdüğü durumda farklı bir deyimin çalıştırılması için kullanılır. Ancak, else’ten farklı olarak, ilgili deyimi sadece kendisine ait koşullu ifade TRUE değerini döndürdüğü takdirde çalıştırılacaktır.
İf (koşul veya koşullar){
Koşullar veya koşullar doğru ise yapılacak işlemler.
}elseif(diğer koşul veya koşullar){
Bu koşulların doğru olması durumunda yapılacak işlemler
} else{
Yukarıdaki koşulların hiçbirinin doğru olmaması halinde yapılacak işlemler.
}   


Örnek: 



Sonuç:

 

Örnek: Bu programda 3 ihtimal vardır. Seyma büyük, Figen büyük ve yaşlar eşit. Birinci if deyimi ile Şeyma’nın büyük olma durumunu 2.if deyimi ile Figen’in büyük olma durumunu sorguladık. İkisi de değilse son ihtimal olan yaşların eşit olma durumunu yazdırdık. 

 

Sonuç:


Örnek:



Sonuç:
             Dört

Denetim yapıları için diğer sözdizimi

PHP bazı denetim yapıları için farklı bir sözdizimi sağlar. Bu yapılar if ,while, for,foreach ve switch yapılarıdır. Her durumda, bu farklı sözdiziminin basit şekli açılışta kullanılan kaşlı ayracın yerine iki nokta imi(:) ve kapanışta kullanılan kaşlı ayraç yerine de sırasıyla endif; endwhile;,endfor;,endforeach; ya da endswitch; deyimlerinden birini kullanmaktır.

Örnek: Aşağıdaki örnek if yapısında kullanımı gösterilmiştir.




Sonuç:
             5

Elbette bu alternatif sözdizimi (syntax) sadece if için geçerli değil. Aynı zamanda while,for,foreach,switch içinde geçerli. Bu yapı için hepsinin kullanımı standarttır.

 
Örnek:   



 WHILE
while döngüsü PHP’de yer alan en basit döngü türüdür. C’deki karşılığı ile aynı şekilde çalışır yani koşul sağlandığı müddetçe birtakım işlerin yapılmasını sağlar. Bir while deyiminin basit kullanımı:
while(koşul){
koşul sağlanırsa çalışacak kodlar
} 
While döngüsü şu mantıkla çalıyır:

  • ·         Koşul ifadesi kontrol edilir.

  • ·         Koşul sağlanıyorsa while bloğu içindeki işlemler yapılır.

  • ·         Başa dönülür ve koşul kontrol edilir.

  • ·         Koşul hala sağlanıyorsa blok içindeki kodlar çalıştırılır, koşul sağlanmıyorsa döngüden çıkılır.

Döngüden çıkabilmek için belli bir noktadan sonra koşulun false değer üretmesi gerekir. Aksi durumda sonsuz döngü oluşur.

Örnek:





Sonuç:




Bu örnekte koşul daima sağlanacağından while bloğu içindeki echo komutu daima çalışacak ve bir sonsuz döngü oluşacaktır.


     Örnek:


   

    Sonuç:



Örnek: Tanımlı olan dizinin tüm değerlerini ekrana yazdıralım. While içindeki (@)  işareti hata var  ise görüntüleme demektir.





Sonuç:

 



Örnek: Burada $sonuc değişkenini her döngüde 1 arttırarak çarptık. Yani ilk olarak 1*1 sonrasında 1*2, sonra… şeklinde sayı 10 ‘dan küçük olana kadar çarptık. 




Sonuç:



DO-WHİLE
do-while döngüsü, while döngüsüne çok benzer; farkı, doğrulama ifadesinin her yinelemenin başında değil sonunda değerlendiriliyor olmasıdır. while döngüsü ile temel farklılık, do-while kullanıldığında ilk yinelemenin daima yapılıyor olmasıdır(ifadesinin doğruluğuna yalnızca yinelemenin sonunda bakılır); halbuki while döngüsünde, ifadenin doğruluğuna her yinelemenin öncesinde bakılmakta ve ifadenin sonucu doğru değilse yineleme hiç başlatılmadan döngü sonlandırmaktadır.

do
{
  döngü içerisinde yapılacak işlemler;
}
while(koşul);
Dikkat: do while döngüsünde while döngüsünden farklı olarak while(koşul) satırından   sonra noktalı virgül kullanıldığına dikkat ediniz.
Şu mantıkla çalışır:

  • ·         İlk seferde, herhangi bir koşula bakmaksızın do bloğundaki işlemler yapılır.

  • ·         While deyiminin parantezlerindeki koşul kontrol edilir.

  • ·         Koşul sağlanıyorsa do bloğu tekrar çalıştırılır, koşul sağlanmıyorsa döngüden çıkılır.


  Örnek: Ekranda 1 kez ‘Merhaba Dünya’ yazar.




Yukarıdaki örnekte aslında while yazdığımız koşul geçersiz.Yani $sayi değişkeni 5 den küçük değil ama do while döngüsünde koşula bakılmadan önce 1 kere çalıştırıldığı için kod bir kez çalışacaktır.

Sonuç:



Örnek: 1’den 10’a kadar sayıları ekrana yazdıralım.


Sonuç:

 

FOR DÖNGÜSÜ
Belirlediğimiz başlangıç şartından koşul şartına kadar yazdığımız kodları çalıştırır. Döngüyü kontrol etmek için döngü sayacı olarak adlandırılan bir değişken kullanılır. Bu genelde $i değişkenidir. Biz de burada döngü değişkeni olarak $i değişkenini kullanacağız. Döngü değişkeni kullanmamızın amacı döngünün sınırlarını belirlemektir.
Kullanım Şekli:

for (başlangıç ; koşul ; artış miktarı){



//döngü altında çalışacak komutlar



}
Başlangıç: Döngünün en başında bir kereliğine koşulsuz olarak çalıştırılır.
Koşul: Her yinelemenin başında Koşul ifadesi yeniden değerlendirilir. Bu ifadeden TRUE sonucu elde edilirse, döngüye devam edilir ve döngünün etki alanındaki deyimler çalıştırılır. Bu ifadeden FALSE sonucu elde edildiğinde etki alanındaki deyimler çalıştırılmaksızın döngü sonlandırılır.
Artış miktarı: Döngü değişkeninin kaçar kaçar artacağını belirtmek için kullanılır.

Örnek: 1’den 5’e kadar dönen ve ekrana ‘Merhaba Dünya ’ yazan bir döngü kuralım.




Sonuç:



Örnek: 8 sayısının çarpım tablosunu yapalım.




Sonuç:


Örnek: 1’den 20’ye kadar tek sayıları ekrana yazdıralım.


Sonuç:


Örnek: 2010’dan 1920’ye kadar olan yılları açılır listeye ekleyelim.


Sonuç:


 Örnek: 5 satır 3 sütunlu bir tablo oluşturalım.


Sonuç:


FOREACH

Foreach döngüsüne array döngüsü diyebiliriz. Parametre olarak bir dizi alır, ve dizi içindeki eleman sayısı  kadar döner. Sadece bir dizi ve foreach döngüsü ile güzel bir listeleme yapabiliriz. Kullanımı diğer döngülerden farklı ama basittir.
Parametrede as deyiminden sonra yazdığımız değişkene her döngüde sırasıyla bir eleman değerini yükler.

Kullanım şekli:

foreach($dizi as $eleman){

//dizinin tüm elemanlarının sayısı kadar döner

}


Örnek: 


Sonuç:

Dizide ne kadar eleman varsa hepsini sırasıyla parametrede belirttiğimiz $meyve değişkenine atayarak döndürür. 

Örnek: Yukarıdaki örnekteki $meyve’yi silip deneyelim:


Sonuç: Aşağıdaki gibi hata mesajı verecektir.


Örnek: Sırası gelen elemanın anahtarı $isim değişkenine atanır.


Sonuç:
Örnek: Tanımlı olan dizideki sayıların toplamını bulalım.


Sonuç:

   Toplam=44

BREAK

Break Türkçe anlamı kırmaktır. Yani for ,foreach, while, do-while ve switch ibi döngüleri  break ile istediğimiz  yerde kırabiliriz.
Kullanım Şekli:
            while(){
            switch(){
                       case:
                       break;//switch denetiminden çıkar
                       case:
                       break; //hem switch hem de while denetiminden çıkar
            }
}
              
Örnek: $a 4 değeri aldığında break komutu sayesinde sonlanacak 


Sonuç:

Örnek: Burada 100 kez dönecek olan bir for döngüsü yaptık ve her döndüğünde ekrana sayıyı yazmasını istedi. Ama aynı zamanda içine bir koşul daha koyduk, eğer sayi değişkeninin değeri 5 olur ise break ifadesi çalışır.


   Sonuç:


       012345

CONTINUE

Döngünün o anki iterasyonunun sonlanıp bir sonrakine geçilmesini sağlar.


Örnek: $a’nın 3 olduğu yeri atla alt satırı çalıştır.



Sonuç:


Örnek:


Burada iç içe iki while döngüsü var.Dıştaki döngü çalıştığında ‘dış döngüdeyiz’  çıktılanır ve $a bir eksiltilir.İçteki döngü çalışmaya başlar ve iç döngüdeyiz çıktılanır.continue 2 deyiminin  etkisiyle bir üstteki döngüye (yani dış döngüye) geçilir ve bundan sonraki kısım işleme konmaz. Yani echo “burası çalışır mı?” ifadesi hiçbir zaman işleme konmayacaktır. Bir önceki örnekte continue deyimi, for döngüsünde başa dönmemizi sağlamıştı. Buradaki continue 2 ifadesi ise mevcut döngünün bir üstündeki döngünün başına dönmemizi sağladı.  

Sonuç:   

 Örnek: $i değişkeni 2 olduğu zaman atla


Sonuç:

SWITCH

Bu değişkene bağlı koşullu işlem yaparken IF,ELSEIF.. şeklinde uzunca bir komut kullanmak hem zamanımızı alır, hem php derleyiciyi yorar. Bu gibi durumlarda Switch kodu işimizi kolaylaştırır.
Kullanım şekli:
switch($degisken){
case durum1:
//durum1 sağlanırsa çalışacak kodlar
break;
case durum2;
//durum2 sağlanırsa çalışacak kodlar
break;
default:
//hiçbir durum sağlanmazsa çalışacak kodlar
}
Kullanılan değişkenin alabileceği durum değerlerini istediğiniz kadar çoğaltabilirsiniz. durum’lar içinde kullandığımız break şartın duruma uyması halinde diğer şartların çalıştırılmadan switch-case yapısından çıkmak için kullanılır. Son satırda yer alan default ifadesi ise değişken değeri hiç bir şarta uymuyorsa çalıştırılacak olan komutları yazacağımız bölümdür.

Örnek: Sayının tek ya da çift olma durumu




Sonuç:   

    Sayı tektir.

Örnek:



Sonuç:


Örnek:


Sonuç:    


DECLARE

 declare yapısı bir kod bloğunun çalıştırılması esnasında uygulanacak yönergeleri belirlemek için kullanılır. declare yapısının söz dizimi diğer akış denetim yapılarının söz dizimi ile benzerdir.

declare (yönerge)
       deyim

Yönerge bölümü, declare bloğunun davranışını belirlemek için kullanılır. Şimdilik yalnızca iki yönerge kullanılabilmektir. declare bloğunun deyim bölümünün nasıl çalıştırılacağı ve çalışma esnasında yan etkilerinin ne olacağı yönerge bölümünde belirtilen yönergeye bağlı olabilir. declare bloğu kendinden sonra gelen tüm kodu etkilemesi için genel betik kapsamında da kullanılabilir. Bununla birlikte, declare bloğu dahil edilen bir dosyanın içindeyse ebeveyn dosya etkilenmez.

Kullanım şekli:

declare (thicks=1){
    //betiğin tamamı burada
}

Bir “tik”,declare bloğu çerisinde çözümleyici tarafından çalıştırılan her (N) tiklenebilir deyimde bir ortaya çıkan bir oladır.(N) değeri, declare bloğunun yönerge bölümünde ticks=(N) kullanılarak belirtilir. Her deyim tik sayımına dahil edilebilir değildir.

Örnek:


Sonuç:


RETURN

Elde ettiğimiz sonuçları bir değişkene atayıp kullanırız. return() komutu bir fonksiyon içerisinden aynı fonksiyon dışına veri göndermek için kullanılan bir komuttur. Bazı durumlarda return bir değer gönderip bunu döndürebilir, bazen de hiçbir değer döndürmeyebilir. Ulaşılmak istenen data, değişik şekillerde karşımıza çıkabilektedir.
Return komutunun döndürdüğü değer bir işlemin sonucu olabilir. Döndürülen data, direk olarak belirtmek istenen integer bir değer olabilir. Ya da diğer bir fonksiyon ve parametresi olarak atanmış da olabilir.

Örnek: 


Sonuç:


  Örnek: İki sayının toplamını bir değişkene değer olarak atadık.


Sonuç:
Örnek: İki sayı arasında büyük olanı bulma


Sonuç:

REQUIRE

require ile dahil ettiğiniz dosya yüklenmezse yani bulunamazsa php size error verir yani fatal error. Burada hata verdiği yerden sonraki kodu çalıştırmaz yani programa sanki exit() demiş gibi olursunuz, program oradan kesilir, durur. Yani siz php’de ye require ile yüklediğim dosya hayatı öneme sahip, yükleyemezsin programın çalışmaya devam etmesinin bir anlamı yok demiş oluruz.
include ile benzer özellikler gösteriyor. Fakat farklılıklar da bulunuyor ki şöyle; eğer include() kullanırken bir hata oluşursa, hata oluşan satırdan sonraki satırlar yine de çalıştırılacaktır. Fakat require() kullanıyorsanız, require() satırından sonraki satırlar çalıştırılmaz. Peki neden böyle bir şey var? Çünkü, örneğin veritabanı bağlantısı yapıyorsunuz incude() kullandınız ve çağırdığınız dosyada hata var. Eğer veritabanını çalıştırmazsanız sayfanızda büyük sorunlara yol açar hatta hiçbir sonuç çıkmaz. Ama include() kullandığınız için sonraki kodlar çalıştırılır. Bunun yerine require() kullanmak daha mantıklı olacaktır. Yine include() kullanmanın da faydalı olacağı yerler vardır.

Örnek:
“isimler.php” adında dosyamız olsun. Bu dosya içine akrabalarımın isimlerini saklıyorum.


Daha sonra “require.php” adında dosya açıp baba ve annemin adlarını çağırıyoruz.


include içinde dosya adı yanlış yazdığımızda aşağıdaki gibi hata mesajı verecektir.


Bu sayfadan gelmesi umduğunuz değişkenleri kullandık. Zincirleme hataya sebep oldu. Bunun yerine require() kullanmış olsaydık, en azından değişkenlerin hatasından kurtulurduk. Çünkü echo satırı işletilmezdi.




Doğrusunu yazacak olursak;


Sonuç:


INCLUDE

include fonksiyonu belirtilen dosyayı programa ekler. Eğer dosyayı bulamazsa ekrana bir uyarı mesajı yazar.


Örnek:


Sonuç Hatalı:


Bu $renk ve $ meyve ‘nin tanımlı olmadığını gösterir. Doğrusuna bakacak olursak;


Sonuç:


REQUIRE_ONCE

require için söylediklerimizin hepsi bunun için de geçerli ancak bir üstünlüğü ya da farkı var diyebiliriz. Bu kodda da dosya bulunamazsa kodun oradan sonrasını öldürür (çalıştırmaz) ve yaptığı diğer iş de yüklemeye çalıştığın dosyayı önceden daha önce aynı sayfada yüklemiş misin? Daha önce aynı dosyayı yüklediysen ikinci kez yüklemek istersen 10 defa yüklenmeye çalış bir tane yükler o da ilk yüklendiğindir.

 Örnek: İki defa yazdığımız halde dosyayı bir kez çağırır.


INCLUDE_ONCE

include_once fonksiyonu ise aynı isimli dosyadan 2 kere dahil etmeyi önler.

Örnek: