PHP Programlama 2. Bölüm. Tolga GÜYER

Benzer belgeler
PHP ile İnternet Programlama

PHP ile İnternet Programlama Doç.Dr. Tolga GÜYER

HSancak Nesne Tabanlı Programlama I Ders Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

İnternet Programcılığı Dersi 2.Dönem Ders Notu

Internet Programming II

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

ALGORİTMA VE PROGRAMLAMA I

Akış Kontrol Mekanizmaları

WEB PROGRAMLAMA. PHP Temelleri 2. Dr. Erman Yukselturk

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

Veri Yapıları ve Algoritmalar


BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

PASCAL PROGRAMLAMA DİLİ YAPISI

C Programlama Dilininin Basit Yapıları

Diziler İndisli Değişkenler

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

Ders Tanıtım Sunumu. Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr. Gör. Murat KEÇECİOĞLU 1

Internet Programming II

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

BÖLÜM 4 KONTROL DEYİMLERİ

BİL-142 Bilgisayar Programlama II

YZM 2105 Nesneye Yönelik Programlama

FORMÜLLER VE FONKSİYONLAR

KONTROL YAPILARI JAVADA UC TURLU KONTROL YAPISI VARDIR BUNLAR İF ELSE İF ELSE İF SWİTCH YAPILARIDIR. IF ELSE YAPISI if (deger) { }else {

ÖDEV (Vize Dönemi) CEVAPLAR. 1. Ekrana Merhaba Dünya! yazdıran algoritmanın akış diyagramını çiziniz ve sözde kod olarak yazınız.

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ (Algoritma Geliştirmek, Satır Kod)

BMT 101 Algoritma ve Programlama I 7. Hafta. Yük. Müh. Köksal Gündoğdu 1

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

Algoritmalar ve Programlama. Algoritma

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

Programlama Dili Prensipleri. Lab Notları 4

Bilgisayar Programlama

BİLGİSAYAR PROGRAMLAMA MATLAB

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Algoritma ve Programlamaya Giriş

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

BMT 101 Algoritma ve Programlama I 8. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1

k ise bir gerçek sayı olsun. Buna göre aşağıdaki işlemler Matlab da yapılabilir.

PHP ile İnternet Programlama

BBS515 Nesneye Yönelik Programlama. Ders 3 Zümra Kavafoğlu

Fen ve Mühendislik Uygulamaları ile MATLAB

Algoritma ve Akış Diyagramları

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 9

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

C PROGRAMLAMA YRD.DOÇ.DR. BUKET DOĞAN PROGRAM - ALGORİTMA AKIŞ ŞEMASI

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Nesne Tabanlı Programlama

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Belirli bir iş bir çok kez tekrarlanacaksa, programda bu iş bir kez yazılır ve döngü deyimleriyle istenildiği kadar tekrar tekrar çalıştırılabilir.

BİLGİSAYAR PROGRAMLAMA DERSİ

C Dersleri Bölüm 3 : Program akışı

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

JAVASCRIPT JAVASCRIPT DİLİ

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Bölüm 4 C de Program Kontrolü

Genel Programlama II

BİLGİSAYAR PROGRAMLAMA DERSİ

Bu amaçla, if ve switch gibi karar verme deyimleri, for, while, do..while gibi döngü deyimleri kullanılır.

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Genel Programlama II

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA

ALGORİTMA VE PROGRAMLAMA I

BİLGİSAYAR PROGRAMLAMA DERSİ

C#(Sharp) Programlama Dili

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 5. Bölüm Karar ve Çevrim Kontrol Yapıları

Pythonda değişkenlerin türlerini tanımlamaya gerek yoktur

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Öğr. Gör. Serkan AKSU 1

Nesne Yönelimli Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

BÖLÜM 3 OPERAT A ÖRLER

ÜNİT E ÜNİTE KONTROL DEYİMLERİ KARAR YAPILARI. IF Deyimi GİRİŞ

Python Programlama Dili

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

ALGORİTMA VE PROGRAMLAMA I

Program AkıĢ Kontrol Yapıları

Transkript:

PHP Programlama 2. Bölüm 2009-2010

İçindekiler 2.1 Sözdizim Yapısı 2.2 Yorum Satırları 2.3 Veri Türleri 2.4 Değişkenler ve Sabitler 2.5 Operatörler 2.6. Diziler 2.7 Akış Kontrol Deyimleri 2

İçindekiler 2.8 Öğrendiklerimizi Uygulayalım: Sihirli Kareler 2.9 Fonksiyonlar 2.10 Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi 3

Sözdizim Yapısı Bir programlama dilinin sözdizimi (syntax), noktalama işaretleri, parantezler ya da operatörler gibi nesnelerin, o dilin yapısına uygun olarak kulanım kurallarını belirler. Söz gelimi, PHP dilinde de Pascal diline benzer olarak her program deyiminin noktalı virgül işareti ile sonlandırılması zorunluluğu bir sözdizim kuralıdır. 4

Sözdizim Yapısı Burada vurgulanması gereken önemli bir nokta, satırların değil, deyimlerin sonuna noktalı virgül konulmasıdır. Çünkü PHP çözümleyicisi kaynak kodları satır satır değil, ayıraç sembolü olarak noktalı virgül işaretini kullanarak yorumlar. 5

Sözdizim Yapısı PHP kodları çoğunlukla HTML kodları ya da Javascript, VBscript gibi diğer dillerle beraber kullanıldığından, bir kod bütününde PHP çözümleyicisinin görev alanının nerede başladığı ve nerede sona erdiğinin belirlenmesi amacıyla <?php?> etiketleme sistemi kullanılır. 6

Sözdizim Yapısı Örneğin, <?php echo Merhaba Dünya! ;?> kodu doğrudan PHP çözümleyicisi tarafından yorumlanarak çalıştırılabilecek bir koddur. Kodun işlevi ise ekrana Merhaba Dünya metnini yazdırmaktır. 7

Sözdizim Yapısı Aynı işleve sahip, ancak bu defa HTML kodu içersine gömülmüş durumda olan bir başka PHP kodu aşağıda gösterilmiştir. <html> <body> <?php echo "Merhaba Dünya!";?> </body> </html> 8

Sözdizim Yapısı Bu durum, birinci bölümde de bahsedildiği gibi HTML den kaçış olarak adlandırılır. Ancak HTML kodları içersinde yer alan PHP deyimlerinin web tarayıcısı tarafından çözümlenerek çalıştırılabilmesi için bu kodu içeren dosyanın php uzantısına sahip olması gerektiğini unutmayalım. 9

Sözdizim Yapısı Ekrana yazdırmak istediğimiz ifadeler için, echo ya da print deyimlerini kullanırız. Bu deyimlerden sonra çift tırnak sembolü içersinde yazacağımız ifadeler, bazı özel durumların dışında, doğrudan yazıldığı şekliyle ekrana basılacaktır. 10

Sözdizim Yapısı Örneğin, <html> <body> <?php echo "Merhaba Dünya!";?> </body> </html> kodunun çıktısı aşağıdaki gibi olur: Merhaba Dünya! 11

Sözdizim Yapısı biçiminde olacaktır. Ancak kullanıcının internet tarayıcısında Türkçe harflerin düzgün görüntülenebilmesi için UTF8 gibi Türkçeye uygun bir karakter kodlama sisteminin seçilmiş olmasının gerektiğini de hatırlatalım. 12

Sözdizim Yapısı <?php echo Merhaba ; echo Dünya! ;?> koduna ait ekran çıktısı ise; Merhaba Dünya! biçiminde olur. 13

Sözdizim Yapısı Görüldüğü gibi farklı echo deyimleri kullanılarak yazılsalar da, ifadeler aynı satırda görüntülenmektedir. Eğer ifadeleri farklı satırlarda görmek istiyorsak, bu durumda yazacağımız koda küçük bir ek yapmamız gerekir. 14

Sözdizim Yapısı <?php echo Merhaba ; echo <br> ; echo Dünya! ;?> koduna ait ekran çıktısı; Merhaba Dünya! biçiminde olur. 15

Sözdizim Yapısı Bu örnek küçük ama önemli bir bilgiyi içermektedir. İkinci echo deyimi ile yazdırdığımız <br> ifadesi ekrana herhangi bir şey yazmamış, bunun yerine birinci ve üçüncü echo deyimlerinin yazdıkları ifadelerin arasında satırbaşı yapma işlevini sağlamıştır. <br> İfadesi aslında bir HTML etiketidir ve işlevi de tam olarak budur. 16

Sözdizim Yapısı Dolayısıyla internet tarayıcısı echo deyimi ile ekrana yazılacak ifadeleri denetlemekte, bu ifadeleri HTML kodu olarak yorumladığı takdirde doğrudan ekrana yazmak yerine çalıştırmakta ve sonucunu görüntülemektedir. 17

Sözdizim Yapısı echo Deyimi kullanılarak gerçekleştirilmiş, PHP içersinden çalıştırılan HTML kodlarına verilebilecek başka bir örnek; <?php echo "<p><strong>merhaba Dünya!</strong></p>";?> şeklindedir. Bu koda ait ekran çıktısı ise; Merhaba Dünya! biçiminde olacaktır. 18

Sözdizim Yapısı Bu yöntemde karşılaşabileceğimiz bir problem, çift tırnak işaretlerinin kullanımında yaşanacaktır. Şöyle ki çift tırnak, bir yandan echo deyiminin etki alanının belirlenmesinde kullanılırken, diğer yandan bir çok HTML deyiminde değerlerin belirlenmesinde kullanılmaktadır. 19

Sözdizim Yapısı Bu gibi durumlarda PHP dili için özel karakterlerden birisi olan \ (ters bölü) işaretin kullanılır. Bir sonraki örneğimiz, bu işaretin kullanımına ilişkindir. 20

Sözdizim Yapısı <?php echo "<font size=\"5\">katilimcilar</font>"; echo "<p>"; echo "1. Murat SÖNMEZ<br>"; echo 2. Arzu ŞAFAK<br>"; echo 3. Mustafa YÜZEN<br>"; echo 4. Meral ALSANCAK"; echo "</p>";?> koduna ait ekran çıktısı; 21

Sözdizim Yapısı KATILIMCILAR 1. Murat SÖNMEZ 2. Arzu ŞAFAK 3. Mustafa YÜZEN 4. Meral ALSANCAK biçiminde olacaktır. 22

Sözdizim Yapısı Burada, ilk echo deyimi ile yazdırılan ifade bir HTML deyimidir. Bu deyim içersinde, size parametresinin değerinin belirlenmesi için çift tırnak işareti bulundurmaktadır. Bu çift tırnak işaretlerinin, echo deyimine ait olan ve PHP tarafından dikkate alınacak olan (kodda kırmızı renkte gösterilmişlerdir) çift tırnaklardan ayırt edilebilmeleri için \ işareti kullanılmıştır. 23

Yorum Satırları Kod içersinde, PHP tarafından dikkate alınmayan, kodu inceleyene açıklama yapmak amaçlı olarak yorum satırları yer alabilir. Tek satırlı ya da çok satırlı olarak yorum satırları eklenebilir. Aşağıda, koda farklı şekillerde eklenmiş yorum satırları görülmektedir. 24

Yorum Satırları <?php echo PHP ; // Bu, tek satırlık c++ türünde bir yorum satırıdır. /* Bu bir çok-satırlı yorumdur. Yazılırken <Enter> tuşu kullanılmıştır. */ echo öğreniyorum! ; # Bu da, tek satırlık kabuk (shell) türünde bir yorum satırıdır.?> Bu durumda kodun çıktısı, PHP öğreniyorum! biçiminde olacaktır. 25

Veri Türleri PHP dili temel programlamada, geleneksel dillerde olduğu gibi değişkenlerin veri türlerinin önceden belirlenmesine gereksinim duymamaktadır. Değişkenin deklare edilmesi olarak adlandırılan bu işlem, PHP de değişkene ilk değeri atandığı sırada gerçekleşir. Diğer bir deyişle, değişkene ilk değerini atadığınızda, aslında o değişkene ait veri türünü de deklare etmiş olursunuz. 26

Veri Türleri Üç temel veri türünü, sayısal olmayan stringtabanlı türler (text, string, char gibi), sayısal türler (integer, double gibi) ve diziler (array) şeklinde sıralayabiliriz. 27

Veri Türleri Diziler, özel tanımlama özelliklerine sahip olduklarından, diğer veri türlerinden kolaylıkla ayırt edilebilirler. String-tabanlı türler ise, aritmetik işlemlerde kullanılmayan türlerdir ve sayısal türlerle aralarındaki en önemli fark, bu türdeki değerlerin (çift tırnak) işreti arasında yer almalarıdır. 28

Veri Türleri Örneğin, 2 değeri sayısal bir veri türü iken, 2 değeri 1 baytlık bir string, yani karakter türünde olacaktır. Dolayısıyla dönüştürme işlemi uygulanmadan aritmetik işlemlerde kullanılamaz. 29

Değişkenler ve Sabitler Programların çalıştıkları sırada kullandıkları değerleri bellekte saklama zorunlulukları vardır. Bunlar kullanıcılar tarafından girilen değerler olabilecekleri gibi, doğrudan programın kendi ürettiği sonuçlar da olabilir. 30

Değişkenler ve Sabitler Değerlerin saklandıkları dil bileşenleri değişkenler ve sabitler olarak adlandırılırlar. Birbirlerine çok yakın bir işleve sahip olan bu bileşenler arasındaki temel fark, değişkenlerin taşıdıkları değerlerin programın çalışması süresince dinamik olarak değişebilmesi, buna karşılık sabitlerin değerlerini korumalarıdır. 31

Değişkenler ve Sabitler Değişkenler Bir değişken için iki önemli özellik söz konusudur: Değişkenin adı ve sakladığı verinin türü. 32

Değişkenler ve Sabitler PHP dili, güçlü-türlendirilmiş diller (strongly-typed languages) sınıfına girmediğinden, değişkenlerin bu dillerde olduğu gibi önceden tanımlanmasına (deklare edilmesine) gerek yoktur. Dolayısıyla bir değişken, doğrudan ilk değer ataması ile otomatik olarak deklare edilmiş olacaktır. 33

Değişkenler ve Sabitler PHP dilinde değişkenleri diğer dil öğelerinden ayıran simge $ (dolar) işaretidir. Her değişken adı, $ işareti ile başlar ve değişken isimlendirme kuralları gözetilerek isimlendirilir. 34

Değişkenler ve Sabitler Değişkenleri isimlendirirken dikkat etmemiz gereken kuralları aşağıda verilmiştir: 1. Bir değişken ismi, bir harf ya da _ (alt tire) sembolü ile başlayabilir. 2. Bir değişken ismi sadece alfa-nümerik karakterleri (a-z, A-Z, 0-9) ve alt tireyi (_) içerebilir. Türkçe harfler (ç,ç,ğ,ğ,ı,i,ö,ö,ü,ü) bunlara dahil değildir. 35

Değişkenler ve Sabitler 3. Değişken isimleri boşluk içeremezler. Ayırma gerektiğinde alt tire (bolum_kodu gibi) ya da büyük harfler (bolumkodu gibi) kullanılabilir. 36

Değişkenler ve Sabitler Bu durumda PHP dilinde bir değişkenin deklarasyonu ve değer ataması, genel olarak aşağıdaki şekilde olacaktır: $degisken_adi = deger; Daha somut bir örnek aşağıda verilmiştir: <?php $metin= Merhaba!"; $sayi=7;?> 37

Değişkenler ve Sabitler Burada $metin, ismi metin olan string türünde bir değişken olarak tanımlanmıştır. $sayi ise sayi adında tamsayı türünde bir değişken olarak kullanılmıştır. = sembolü ile yapılan bu işleme değer atama adı verilir. Değer atama işlemi = sembolünün sağından soluna doğru yapılır. Dolayısıyla eşitliğin solunda mutlaka bir değişken sembolü bulunmalıdır. 38

Değişkenler ve Sabitler Değer aktarmalarda, aktarılan değerler otomatik olarak ekranda görüntülenmezler. Bunun için yine echo deyiminden yararlanabiliriz: <?php $metin= Merhaba!"; $sayi=7; echo $metin; echo $sayi;?> 39

Değişkenler ve Sabitler Bu kodun ekran çıktısı; Merhaba!7 şeklinde olacaktır. 40

Değişkenler ve Sabitler Değişkenlerin içerdikleri değerler ile sabit metinleri bir arada görmek istediğimizde, yine çift tırnak işaretinden yararlanabiliriz: <?php $metin="merhaba!"; $sayi=7; echo "Metin:$metin Sayı:$sayi";?> 41

Değişkenler ve Sabitler Bu kodun ekran çıktısı ise; Metin:Merhaba! Sayı:7 şeklinde olacaktır. 42

Değişkenler ve Sabitler PHP diline özgü oldukça kullanışlı özelliklerden birisi de, değişkenlerin taşıdıkları değerleri kullanarak yeni değişkenler türetebilme yeteneğidir. Aşağıdaki örneği inceleyelim: <?php $a = 'merhaba'; $$a = 'dünya'; echo $merhaba;?> 43

Değişkenler ve Sabitler Bu durumda ekran çıktısı; dünya biçiminde olacaktır. 44

Değişkenler ve Sabitler Burada, $a değişkeninin değeri olan merhaba metni kullanılarak yeni bir $merhaba değişkeni tanımlanmış, bu değişkene değer olarak da dünya metni aktarılmıştır. Bu işlem, ikinci bir $ simgesi kullanılarak gerçekleştirilmiştir. 45

Değişkenler ve Sabitler Aynı çıktıyı aşağıdaki kod ile elde etmek mümkündür: <?php $a = 'merhaba'; $$a = 'dünya'; echo "${$a}";?> 46

Değişkenler ve Sabitler Bu durumda aşağıdaki kodun ekran çıktısı; <?php $a = 'merhaba'; $$a = 'dünya'; echo "$a ${$a}";?> merhaba dünya biçiminde olacaktır. 47

Değişkenler ve Sabitler Sabitler Değişkenlere benzerler, ancak sabitlerin taşıdıkları değerler, programın çalışması süresince aynı kalır. Define bildirimi kullanılarak tanımlanırlar. 48

Değişkenler ve Sabitler Aşağıda sabit tanımlama ile ilgili örnek bir kod parçası verilmiştir: define("kasa_ucreti", 85.50); define("anakart_ucreti", 150.0); define("islemci_ucreti", 275.30); define("sabitdisk_ucreti", 120.80); define("cddvd_ucreti", 90.0); define("bellek_ucreti", 134.20); 49

Değişkenler ve Sabitler Görüldüğü gibi sabitler, değişkenlerden farklı olarak isimlerinin başlarında $ simgesi taşımazlar. Aşağıda, yukarıda tanımlanan sabitlerin nasıl kullanılacağına ilişkin örnek kod parçası verilmiştir: $toplam_birim_fiyat = kasa_ucreti + anakart_ucreti + islemci_ucreti + sabitdisk_ucreti + cddvd_ucreti + bellek_ucreti; 50

Operatörler Operatörler, değerler üzerinde işlemlerin gerçekleştirilmesinde kullanılırlar ve dilin en önemli bileşenlerindendirler. PHP operatörlerini genel olarak dört kategori altında toplayabiliriz. 51

Operatörler 1. Aritmetik Operatörler 2. Değer Atama Operatörleri 3. Karşılaştırma Operatörleri 4. Mantıksal Operatörler Şimdi bunları ayrı ayrı ele alalım. 52

Operatörler Aritmetik Operatörler Değişkenler ve sabit değerler üzerinde her türlü aritmetik işlem, aritmetik operatörler kullanılarak gerçekleştirilir. PHP diline özgü olarak. (nokta) sembolü de metinsel birleştirme işlevine sahiptir ve aritmetik operatörler tablosunda gösterilmiştir. 53

Operatörler Operatör Tanımı Örnek Sonuç + Toplama $x=2 $sonuc=$x+2 4 - Çıkartma $x=2 $sonuc=$x-1 1 * Çarpma $x=4 $sonuc=$x*5 20 / Bölme $x=15 $sonuc1=$x/5 $sonuc2=$x/2 % Mod (Bölmede kalan) $sonuc1=5%2 $sonuc2=10%8 $sonuc3=10%2 3 7.5 1 2 0 54

Operatörler Operatör Tanımı Örnek Sonuç ++ Artırma $x=7 $x++ -- Azaltma $x=10 $x--. Metinsel birleştirme $x1= LAB $x2= 101 $sonuc=$x1.$x2 $x=8 $x=9 LAB101 55

Operatörler Değer Atama Operatörleri Temel değer atama operatörü = simgesidir. Atama, bu simgenin sağından soluna doğru gerçekleşir. 56

Operatörler Diğer operatörler = operatörünün aritmetik operatörlerle birlikte kullanılması ile türetilmişlerdir. Bunlar, bir aritmetik işlem ve sonrasında gerçekleştirilecek değer atama işlemini birleştirerek tek seferlik bir atama işlem haline getirirler. 57

Operatörler Operatör Örnek Eşdeğer İşlem = $x=$y $x=$y += $x+=$y $x=$x+$y -= $x-=$y $x=$x-$y *= $x*=$y $x=$x*$y /= $x/=$y $x=$x/$y.= $x.=$y $x=$x. $y %= $x%=$y $x=$x%$y 58

Operatörler Karşılaştırma Operatörleri Karşılaştırma operatörleri, ilerleyen kesimlerde ele alacağımız koşullu ifadelerde kullanılmaktadır. Bir karşılaştırma işlemi, true (doğru) ya da false (yanlış) değerini üretir. 59

Operatörler Tabloda PHP dilinde kullanılan karşılaştırma operatörleri örnekler verilerek açıklanmıştır. 60

Operatörler Operatör Tanımı Örnek == Eşittir 3==2 false değer üretir!= Eşit değildir 3!=2 true değer üretir > Büyüktür 3>2 true değer üretir < Küçüktür 3<2 false değer üretir >= Büyük ya da eşittir 3>=2 true değer üretir <= Küçük ya da eşittir 3<=2 false değer üretir 61

Operatörler Mantıksal Operatörler Karşılaştırma operatörleri, ilerleyen kesimlerde ele alacağımız koşullu ifadelerde kullanılmaktadır. Bir karşılaştırma işlemi, true (doğru) ya da false (yanlış) değerini üretir. 62

Operatörler Tabloda PHP dilinde kullanılan karşılaştırma operatörleri örnekler verilerek açıklanmıştır. 63

Operatörler Operatör Tanımı Örnek && ve $x=8 $y=5 ($x < 10 && $y > 1) true değer üretir veya $x=8 $y=5 ($x==5 $y==5) true değer üretir! değil $x=8 $y=8!($x==$y) false değer üretir 64

Diziler Aynı türden verilerin tek bir değişken ile temsil edilmeleri gerektiğinde kullanılırlar. Aynı türden olan, ancak sayıları çok fazla olan farklı verilerin saklanması gerektiğinde, tanımlanması gereken değişken sayısı da paralel olarak artacağından, bu gibi durumlarda önemli bir işleve sahiptirler. 65

Diziler İleriki bölümlerde ele alacağımız döngüsel yapılarla kullanıldıklarında, gereksiz kod yazımını da önemli ölçüde azaltan diziler (array), tek boyutlu ve çok boyutlu olarak sınıflandırılabilirler. 66

Diziler Tek Boyutlu Diziler Konuya bir örnekle başlayalım: <?php $arabalar1="honda"; $arabalar2="volvo"; $arabalar3="bmw"; $arabalar4="toyota";?> 67

Diziler Sadece dört tane araba markasını saklamak istediğimizden, dört tane farklı değişken kullandık. Ama ya 400 farklı markayı saklamak isteseydik? 68

Diziler Aynı örneği, dizi kullanarak yapalım: <?php $arabalar=array("honda","volvo","bmw","toyota");?> Bu defa tanımlamış olduğumuz tek bir değişken olan $arabalar dır. Ancak bu değişken, array bildirimi kullanılarak oluşturulmuş bir dizidir. 69

Diziler Aynı tanımlamayı farklı bir şekilde de yapabilirdik: <?php $arabalar[0]="honda"; $arabalar[1]="volvo"; $arabalar[2]="bmw"; $arabalar[3]="toyota";?> Bu tanımlamada, dizinin indisi adı verilen köşeli parantezlerin içersinde yer alan değerleri kendimiz belirledik. 70

Diziler Her iki tanımlama için de aşağıdaki kod parçası, echo "$arabalar[0] ve $arabalar[3] Japon otomobil markalarıdır."; aynı ekran çıktısını verecektir: Honda ve Toyota Japon otomobil markalarıdır. 71

Diziler Dizilerin indislerinin sayısal olmaları zorunluluğu yoktur. <?php $uretici['honda'] = 'Japonya'; $uretici['volvo'] = 'İsveç'; $uretici['bmw'] = 'Almanya'; $uretici['toyota'] = 'Japonya'; echo "Volvo'nun üreticisi "?>.$uretici['volvo']. dir."; Volvo nun üreticisi İsveç dir. 72

Diziler İlişkilendirilmiş İndisler Dizileri tanımlamanın diğer bir yolu da, => operatörünü kullanarak indisle değeri doğrudan ilişkilendirmektir. 73

Diziler Bu duruma bir örnek aşağıda verilmiştir: <?php $uretici = array("honda"=>"japonya", "Volvo"=>"İsveç", "BMW"=>"Almanya", "Toyota"=>"Japonya"); echo "Honda ve Toyota'nın üreticisi "?>.$uretici['honda']. dır."; Honda ve Toyota nın üreticisi Japonya dır. 74

Diziler Çok Boyutlu Diziler Çok boyutlu dizilerin yapısal olarak tek boyutlu dizilerden bir farkı yoktur. İndis sayısı birden fazla olduğu durumlarda dizi çok boyutlu olarak adlandırılır. 75

Diziler Teorik olarak n>1 olmak üzere n-boyutlu bir dizi tanımlanabilir, ancak pratikte iki boyuttan sonra dizinin kontrolü oldukça güçleşmektedir. İki boyutlu dizileri, tablolar biçiminde ifade edebildiğimiz türden verileri saklamak için kullanırız. 76

Diziler Örneğin, aşağıdaki veri tablosunu göz önüne alalım: Buğday Arpa Mısır Tütün 2005 145 90 210 55 2006 167 60 120 65 2007 180 45 130 121 2008 317 120 134 152 2009 62 261 34 135 77

Diziler Tabloda son beş yıla ait Buğday, Arpa, Mısır ve Tütün üretimi ton olarak verilmiştir. Şimdi bu tablodaki verileri atayacağımız iki boyutlu bir dizi tanımlayalım. 78

Diziler <?php $uretim = array ( "2005" => array( "Buğday" => 145,"Arpa" => 90, "Mısır" => 210,"Tütün" => 55), "2006" => array( "Buğday" => 167,"Arpa" => 60, "Mısır" => 120,"Tütün" => 165), "2007" => array( "Buğday" => 180,"Arpa" => 45, "Mısır" => 130,"Tütün" => 121), "2008" => array( "Buğday" => 317,"Arpa" => 120,"Mısır" => 134,"Tütün" => 152), "2009" => array( "Buğday" => 62, "Arpa" => 261,"Mısır" => 34, "Tütün" => 135)); echo "2006 yılında toplam mısır üretimi ". $uretim["2006"]["mısır"]. " ton olmuştur.";?> 2006 yılında toplam mısır üretimi 120 ton olmuştur. 79

Diziler Görüldüğü gibi iki boyutlu diziler, aslında her bir satırı tek boyutlu diziden oluşan matris tipindeki yapılardır. Bu yapıda her satırın aynı türdeki verilerden oluşması yeterlidir, dizinin tamamının aynı türde verilerden oluşma zorunluluğu yoktur. 80

Diziler Örneğin: <?php $dizi = array("üniversiteler" => array ( "a" => "Gazi", "b" => "Ankara", "c" => "Hacettepe" ), "sayılar" => array ( 1, 2, 3, 4, 5, 6 ), "yıllar" => array ( "1998", 2 => "1999", "2000")); echo $dizi["üniversiteler"]["a"]."<br>"; echo $dizi["üniversiteler"]["c"]."<br>"; echo $dizi["sayılar"][0]."<br>"; echo $dizi["sayılar"][3]."<br>"; echo $dizi["yıllar"][0]."<br>"; echo $dizi["yıllar"][2]."<br>"; echo $dizi["yıllar"][1];?> 81

Diziler Örnek koda ait ekran çıktısı aşağıdaki gibi olacaktır: Gazi Hacettepe 1 4 1998 1999 82

Diziler Kod içersinde 7 tane echo satırı olmasına karşın, çıktıda sadece 6 tane farklı satır görülmektedir. Bunun sebebi, son echo satırında [ yıllar ][1] indisli terimde herhangi bir verinin bulunmamasıdır. Tanımlama biçiminden dolayı bu indis için sadece [ yıllar ][0], [ yıllar ][2] ve [ yıllar ][3] terimleri değer içermektedir. 83

Diziler Dizilerde Kullanılan Operatörler Operatör Tanımı İşlevi $a + $b Birleştirme $a ve $b dizilerini birleştirir. $a == $b Eşitlik $a === $b Denklik $a!= $b $a <> $b Eşitsizlik $a!== $b Denk değil Eğer $a ve $b dizileri aynı indislere ve değerlere sahipse TRUE değerini alır. Eğer $a ve $b dizileri aynı indislere ve aynı türde değerlere aynı sırada sahipse TRUE değerini alır. Eğer $a ve $b dizileri eşit değilse TRUE değerini alır. Eğer $a ve $b dizileri denk değilse TRUE değerini alır. 84

Diziler <?php $a = array("a" => "elma", "b" => "muz"); $b = array("a" => "kayısı", "b" => "çilek", "c" => "vişne"); $c = $a + $b; echo($c["a"]."<br>"); echo($c["b"]."<br>"); echo($c["c"]."<br>");?> elma muz vişne 85

Diziler Kayısı ve çilek nereye gitti? Aynı örneği bu iki dizinin değerlerini üçüncü bir dizide veri kaybı olmayacak şekilde birleştirecek şekilde geliştiriniz. 86

Akış Kontrol Deyimleri PHP programlarının normal akışı, yukarıdan aşağıya doğru doğrusal olarak gerçekleşmektedir. Ancak programcı tarafından bu akışın doğrusallığı zaman zaman sıçramalı ya da döngüsel yapılarla değiştirilebilir. Bu değişikliği gerçekleştiren deyimlere akış kontrol deyimleri adı verilir. 87

Akış Kontrol Deyimleri Akış kontrol deyimlerini genel olarak koşullu ifadeler ve döngüler şeklinde iki kategoride sınıflayabiliriz. 88

Akış Kontrol Deyimleri Koşullu İfadeler Bilgisayarlar için öngörülen gelecek senaryolarının başında, insan gibi düşünen makineler halini almaları gelmektedir. Her ne kadar günümüzde bunun etkileyici örneklerini görsek de, bu fikir şu an için ulaşılması oldukça güç bir nokta olarak gözükmektedir. 89

Akış Kontrol Deyimleri Gördüğümüz örnekler ancak belirli mesleki alanlarda, ya da satranç gibi zeka oyunlarında uzmanlaşmış sistemler biçimindedir ve güçlerini büyük ölçüde sahip oldukları büyük bilgi yığınlarından ve bu yığınlar üzerinde aradıklarını son derece hızlı bir şekilde bulabilme yeteneklerinden almaktadırlar. 90

Akış Kontrol Deyimleri Fakat henüz her konuda fikir yürütebilen yazılım ya da donanımların varlıklarından bahsedebilmek için erken bir zamandır 91

Akış Kontrol Deyimleri Bilgisayar programları için düşünebilme yeteneğinin altında son derece basit bir olgu olan karar verme olgusu yatar ki, bu da en basit şekliyle bilgisayarın belirli bir durum karşısında, önüne gelen seçeneklerden en uygun olanını seçerek ona uygun olarak davranması şeklinde açıklanabilir. 92

Akış Kontrol Deyimleri Diğer bir deyişle bir program için karar verme durumu, program akışının koşul adı verilen ve Boolean, yani True (doğru) ya da False (yanlış) değer alan ifadenin, aldığı değere göre yönlendirilmesi biçiminde gerçekleştirilir. 93

Akış Kontrol Deyimleri En temel koşullu ifade biçimi, Türkçede eğer anlamına gelen if (koşul) yapısıdır. Bununla birlikte, gelişmiş programlama dillerinin hemen hemen hepsinde bulunan diğer bir koşul yapısı ise switch case yapısıdır. 94

Akış Kontrol Deyimleri If/Elseif/Else En temel koşullu ifade biçimi, Türkçede eğer anlamına gelen if (koşul) {a} yapısıdır. Burada {a} kısmına, koşul sağlandığında gerçekleştirilecek deyim (ya da deyimler) yazılır. 95

Akış Kontrol Deyimleri Aşağıda bununla ilgili bir örnek program ve ekran çıktısı yer almaktadır. <?php $sayi=16; if ($sayi%2==0) echo "$sayi bir çift sayıdır.";?> 16 bir çift sayıdır. 96

Akış Kontrol Deyimleri Ancak kod içersinde $sayi değişkeninin değeri 16 yerine tek bir sayı olarak atanırsa, bu durumda program kullanıcıya herhangi bir mesaj vermeyecektir. 97

Akış Kontrol Deyimleri Aksi halin söz konusu olduğu durumlarda ise if (koşul) {a} else {b} ifadesi kullanılır. Bu durumda koşulun aksinin gerçekleştiği, yani koşulun aldığı değerin değilinin elde edildiği durumlarda else ifadesinden sonra yer alan {b} deyimi (ya da deyimleri) çalıştırılacaktır. 98

Akış Kontrol Deyimleri Örnek program aşağıda verilmiştir: <?php $sayi=15; if ($sayi%2==0) echo "$sayi bir çift sayıdır."; else echo "$sayi bir tek sayıdır.";?> 15 bir tek sayıdır. 99

Akış Kontrol Deyimleri Bu programla aynı sonucu, aşağıdaki kod ile de alabiliriz: <?php $sayi=15; if ($sayi%2==0) echo "$sayi bir çift sayıdır."; if (!$sayi%2==0) echo "$sayi bir tek sayıdır.";?> 100

Akış Kontrol Deyimleri Ancak bu durumda kodu gereksiz yere uzatmış oluruz. Unutmayın, en iyi program, yapılmak isteneni en az kod yazarak gerçekleştiren programdır. Bir koşul ve onun eksi halinin söz konusu olduğu durumlarda, yukarıdaki gibi ilk koşulun değili olan ikinci bir koşul yazmak yerine, else deyimini kullanmak daha yerinde olacaktır. 101

Akış Kontrol Deyimleri Koşul ya da aksi durumun doğrulanması durumunda gerçekleştirilecek işlem sayısı birden fazla olabilir. Bu gibi durumlarda, programlama dillerinde bloklama etiketleri kullanılır. PHP dilinde bloklama işlemlerinde { ve } (açık ve kapalı küme parantezleri) kullanılır. 102

Akış Kontrol Deyimleri Örnek program için şöyle bir senaryo geliştirelim: Bir mağaza, müşterilerine iki türde indirim uygulamaktadır. Bunlardan ilki, hafta sonu indirimidir. Yani alışveriş edilen gün Cumartesi ya da Pazar ise toplam alışveriş tutarına %10 indirim uygulanmaktadır. 103

Akış Kontrol Deyimleri İkincisi ise, 150 TL ve üstü alışverişlerde uygulanan %20 indirimdir. Her iki duruma da giren alışverişler, bu iki indirimden de faydalanabilmektedir. 104

Akış Kontrol Deyimleri <?php $alisveristutari=200; $gun=date("d"); if ($gun=="sat" $gun=="sun ) { $alisveristutari=10*$alisveristutari/100; echo "Haftasonu indirimi uygulanmıştır. Yeni tutar: $alisveristutari ;} if ($alisveristutari>=150) { $alisveristutari-=20*$alisveristutari/100; echo "150 TL üstü indirimi uygulanmıştır. Yeni tutar: $alisveristutari ; }?> 105

Akış Kontrol Deyimleri Burada alışveriş tutarı sabit tutulmuştur. Aynı uygulamayı, alışveriş tutarı kullanıcı tarafından girilecek ve değerleri kendi üzerine gönderecek tek.php dosyası biçiminde geliştirelim. 106

Akış Kontrol Deyimleri <html> <body> <form action="" method="post"> <p>alışveriş Tutarı: <input type="text" name="tutar" ></p> <p><input name="dugme" type="submit" ></p> </form> </body> </html> <?php if(isset($_post["dugme"])){ $alisveristutari=$_post['tutar']; $gun=date("d"); 107

Akış Kontrol Deyimleri if ($gun=="sat" $gun=="sun ) { $alisveristutari- =10*$alisverisTutari/100; echo "Haftasonu indirimi uygulanmıştır. Yeni tutar: $alisveristutari"; } if ($alisveristutari>=150) { $alisveristutari- =20*$alisverisTutari/100; echo "150 TL üstü indirimi uygulanmıştır. Yeni tutar: $alisveristutari ;} }?> Devamı 108

Akış Kontrol Deyimleri If deyiminin en karmaşık biçimi, yapıya aksi halde eğer anlamını taşıyan Elseif deyiminin katıldığı biçimdir. Koşulun aksi halinde başka alt koşulların bulunması durumunda kullanılır. 109

Akış Kontrol Deyimleri Genel yapısı aşağıdaki gibidir: If (koşul) {a} Elseif (koşul_1) {a_1} Elseif (koşul_2) {a_2} Elseif (koşul_n) {a_n} Else {b} 110

Akış Kontrol Deyimleri Bu yapıda, ilk If deyimine ait koşul sağlanırsa diğer durumlara bakılmaksızın sadece {a} deyimi/deyimleri çalıştırılır ve program akışı koşul yapısının sonundan devam eder. 111

Akış Kontrol Deyimleri İlk koşul sağlanmazsa sırasıyla koşul_1, koşul_2,, koşul_n koşulları denetlenir. Bunlardan hangisi sağlanırsa, ilgili deyim/deyimler çalıştırılır. Hiçbir koşulun sağlanmadığı durumda ise, Else deyiminden sonra yer alan {b} deyimi/deyimleri çalıştırılır. 112

Akış Kontrol Deyimleri Örnek program için şöyle bir senaryo geliştirelim: Kullanıcı tarafından girilecek bir notun, verilen tabloya göre karşılık gelen harf notu hesaplanacak ve kullanıcıya bildirilecektir. 113

Akış Kontrol Deyimleri Kullanacağımız tablo aşağıdaki gibi olacaktır: Not Aralığı Karşılık Gelen Harf 0-19 FF 20-29 FD 30-39 DD 40-49 DC 50-59 CC 60-69 CB 70-79 BB 80-89 BA 90-100 AA 114

Akış Kontrol Deyimleri Örneğimizi form içeren bir HTML dosyası ve formdan gelen bilgiyi işleyerek harf notuna dönüştüren bir PHP dosyası biçiminde geliştirelim. 115

Akış Kontrol Deyimleri <html> <body> <form action="nothesapla.php" method="post"> <p>notu Giriniz: <input type="text" name="notu"></p> <p><input type="submit"></p> </form> </body> </html> 116

Akış Kontrol Deyimleri <?php $Not=$_POST['notu']; if ($Not<=19) echo "$Not = FF"; elseif ($Not<=29) echo "$Not = FD"; elseif ($Not<=39) echo "$Not = DD"; elseif ($Not<=49) echo "$Not = DC"; elseif ($Not<=59) echo "$Not = CC"; elseif ($Not<=69) echo "$Not = CB"; elseif ($Not<=79) echo "$Not = BB"; elseif ($Not<=89) echo "$Not = BA"; elseif ($Not<=100) echo "$Not = AA"; else echo "$Not notuna karşılık gelen harf notu yoktur.";?> 117

Akış Kontrol Deyimleri Switch/Case Aynı ifadenin, aldığı farklı değerlere karşılık gelen durumlarının belirlendiği koşullu ifade biçimi switch/case yapısıdır. Aslında bu yapı kullanılarak gerçekleştirilen akış kontrolü, bir dizi if-elseif ifadesi kullanılarak da gerçekleştirilebilir. Ancak bu durum gereksiz kod kalabalığına ve karmaşıklığına yol açacaktır. 118

Akış Kontrol Deyimleri Deyimin genel biçimi aşağıdaki gibidir. switch (ifade) { case değer1: ifade=değer1 olduğunda işletilecek kod; break; case değer2: ifade=değer2 olduğunda işletilecek kod; break; default: ifade, değer1 ve değer2 nin her ikisinden de farklı olduğunda işletilecek kod; } 119

Akış Kontrol Deyimleri Örnek olarak, kullanıcı tarafından girilecek 0 ile 9 arasındaki bir sayının Türkçe okunuşunu yazacak PHP kodunu switch/case yapısını kullanarak yazalım. 120

Akış Kontrol Deyimleri <html> <body> <form action="" method="get"> <p>sayıyı Giriniz: <input type="text" name="sayi" ></p> <p><input name="dugme" type="submit" value="çalıştır"></p> </form> </body> </html> 121

Akış Kontrol Deyimleri <?php if(isset($_get["dugme"])){ $Gelen_Sayi=$_GET['sayi']; switch ($Gelen_Sayi) { case "0": $sonuc="sifir"; break; case "1": $sonuc="bir"; break; case "2": $sonuc="iki"; break; Devamı 122

Akış Kontrol Deyimleri case "3": $sonuc="üç"; break; case "4": $sonuc="dört"; break; case "5": $sonuc="beş"; break; case "6": $sonuc="alti"; break; Devamı 123

Akış Kontrol Deyimleri case "7": $sonuc="yedi"; break; case "8": $sonuc="sekiz"; break; case "9": $sonuc="dokuz"; break; default: $sonuc="giriş Anlaşılamadı..."; } } echo ($sonuc);?> Devamı 124

Akış Kontrol Deyimleri Case blokları içersindeki son deyim olan break deyimi, akış kontrolünü kırmak için kullanılır. PHP nin switch/case yapısı, her bir durumu ayrı ayrı işler. Dolayısıyla her duruma ait kodun işletilmesinin ardından kontrol break deyimi ile kırılmalı ve program akışı switch deyiminin etki alanı dışından devam etmelidir. 125

Akış Kontrol Deyimleri Bunu bir örnekle açıklayalım: <?php $i=0; switch ($i) { case 0: echo "<br>i = 0"; case 1: echo "<br>i = 1"; case 2: echo "<br>i = 2";}?> 126

Akış Kontrol Deyimleri $i=0 olmasına karşın bu koda ait ekran çıktısı: i = 0 i = 1 i = 2 şeklinde olacaktır. 127

Akış Kontrol Deyimleri <?php $i=1; switch ($i) { case 0: echo "<br>i = 0"; case 1: echo "<br>i = 1"; case 2: echo "<br>i = 2"; }?> durumunda ise ekran çıktısı aşağıdaki gibi olur: i = 1 i = 2 128

Akış Kontrol Deyimleri Aynı kodu; <?php $i=1; switch ($i) { case 0: case 1: case 2: echo "<br>0 < i < 3"; break; case 3: echo "<br>i = 3 ; }?> 129

Akış Kontrol Deyimleri şeklinde düzenlersek ekran çıktısı: 0 < i < 3 olacaktır. 130

Akış Kontrol Deyimleri Kodun en doğru biçimini ise aşağıdaki gibi düzenleyebiliriz: <?php $i=1; switch ($i) { case 0: case 1: case 2: echo "<br>0 < i < 3"; break; case 3: echo "<br>i = 3"; break; default: echo "<br>i > 3 ya da i < 0"; }?> 131

Akış Kontrol Deyimleri Bu durumda $i değişkeninin sahip olduğu değer 0,1 ya da 2 ise ilk echo deyimi çalışacak, ardından break deyimi akış kontrolünü kırarak program akışının switch bloğunun ardından devam etmesini sağlayacaktır. 132

Akış Kontrol Deyimleri Bu değerler yerine 3 değerini taşıyorsa bu durumda ikinci echo deyimi çalıştırılacak ve aynı şekilde programın akış kontrolü kırılacaktır. Bu durumların hiçbirisine girmeyen bir değerde ise default bölümünde yer alan echo deyimi çalıştırılacaktır. 133

Akış Kontrol Deyimleri Döngüler Konuya bir örnekle başlayalım. Ekranda alt alta 7 defa PHP Öğreniyorum cümlesini küçükten büyüğe doğru artan yazıtipi büyüklüğü ile yazdıracağız. 134

Akış Kontrol Deyimleri PHP Öğreniyorum! PHP Öğreniyorum! PHP Öğreniyorum! PHP Öğreniyorum! PHP Öğreniyorum! PHP Öğreniyorum! PHP Öğreniyorum! 135

Akış Kontrol Deyimleri İstediğimiz görüntüyü verecek kod aşağıdaki gibi olacaktır: <?php echo "<font size=1>"; echo "<br><b>php Öğreniyorum!</b></font>"; echo "<font size=2>"; echo "<br><b>php Öğreniyorum!</b></font>"; echo "<font size=3>"; echo "<br><b>php Öğreniyorum!</b></font>"; echo "<font size=4>"; echo "<br><b>php Öğreniyorum!</b></font>"; echo "<font size=5>"; echo "<br><b>php Öğreniyorum!</b></font>"; 136

Akış Kontrol Deyimleri?> echo "<font size=6>"; echo "<br><b>php Öğreniyorum!</b></font>"; echo "<font size=7>"; echo "<br><b>php Öğreniyorum!</b></font>"; Devamı 137

Akış Kontrol Deyimleri Örneğimizde olduğu gibi belirli bir kural dahilinde tekrarlanan işlemlerde, işlemi gerçekleştiren kodun da hemen hemen tamamının işlem sayısı kadar tekrarlanması zorunluluğu ortaya çıkmaktadır. Bu da, iyi bir programcının uzak durması gereken en önemli problemlerden birisi olan gereksiz kod kalabalığına yol açmaktadır. 138

Akış Kontrol Deyimleri Bu gibi durumlar için geliştirilen programatik yapılara döngü adı verilir. Döngüler, belirli bir düzen içinde tekrarlanan kodların sadece bir defa yazılmasını sağlarlar. 139

Akış Kontrol Deyimleri Genel olarak döngüleri iki başlık altında sınıflandırabiliriz. Bunlardan ilki, döngü tarafından değeri otomatik olarak artırılan bir sayaç değişkeninin bulunduğu sayaçlı döngülerdir. Diğer tür olan koşullu döngülerde ise döngünün sonlanması için belirli bir koşulun sağlanması söz konusudur. 140

Akış Kontrol Deyimleri Belirli bir indis değişkenine bağlı olarak işlem yapan döngü türleridir. PHP de iki tür sayaçlı döngü vardır: For döngüsü ve Foreach döngüsü. 141

Akış Kontrol Deyimleri For döngüsünde indis değişkeninin doğrudan döngünün tanımlama bloğu içersinde belirtilmesi gerekir. Foreach döngüsünde ise indis değişkeninin yerini bir dizi alır. Dizinin kendi yapısında bir indis değeri zaten tanımlı olduğundan, Foreach yapısında sayaç olarak bu indis değerinin kullanıldığı söylenebilir. 142

Akış Kontrol Deyimleri For Döngüsü Genel yapısı aşağıdaki gibidir: For (Başlangıç değeri; Sınır koşulu; Artış miktarı) { Döngü tarafından çalıştırılacak kod; } 143

Akış Kontrol Deyimleri Başlangıç değeri çoğunlukla sayaç işlevini görecek değişkene ilk değerinin atanması şeklinde belirlenir. 144

Akış Kontrol Deyimleri Sınır koşulu, her döngü adımında yeniden hesaplanan bir Boolean değer üretir. Sonuç True olduğu sürece döngü çalışır, aksi halde sonlanır. Genellikle sayaç değişkeni için bir üst sınır değerinin atanması şeklinde belirlenir. Artış miktarı sayaç değişkeninin nasıl artacağının (ya da azalacağının) belirlendiği parametredir. 145

Akış Kontrol Deyimleri Örnek olarak, daha önce yaptığımız PHP Öğreniyorum! uygulamasını bu kez For döngüsünü kullanarak gerçekleştirelim. <?php for ($i=1; $i<=7; $i++) { echo "<font size=$i>"; echo "<br><b>php Öğreniyorum!</b></font>"; }?> 146

Akış Kontrol Deyimleri Sonuç yine aynı olacaktır. Ancak kodun ilk hali ile karşılaştırıldığında kod kalabalığının oldukça azaldığı görülmektedir. Burada sayaç değişkeni olarak $i belirlenmiş, bu değer yazıtipi büyüklüğünü 1 den 7 ye kadar artırmak için kullanılmıştır. 147

Akış Kontrol Deyimleri Diğer bir örnek, bilinen faktöriyel işlemini gerçekleştirecek döngünün tanımlanmasıdır. <?php $sayi=8; $faktoryel=1; for ($i = 1; $i <= $sayi; $i++) { $faktoryel = $faktoryel * $i; } echo $faktoryel;?> 148

Akış Kontrol Deyimleri Örnekte, 8 sayısının faktöriyeli, yani 8 7 6 5 4 3 2 1 çarpımı hesaplanmaktadır. Aynı örneği, faktöriyeli hesaplanacak sayı bir form aracılığı ile kullanıcı tarafından girilecek şekilde tasarlayabilir misiniz? 149

Akış Kontrol Deyimleri Döngüleri iç içe kullanabiliriz. Bu durumda en içteki döngü, en hızlı dönen döngü olacaktır. 150

Akış Kontrol Deyimleri Bu mekanizmayı daha iyi anlayabilmek için, eski kasetçalar ya da video oynatıcı cihazlarda, ya da günümüzde de kullanılan elektrik ya da su sayaçlarında bulunan mekanik sayaçları düşünebiliriz. 151

Akış Kontrol Deyimleri Üç basamaklı mekanik bir sayacın çalışma prensibi şu şekilde olacaktır: Birler hanesi,0 ile 9 arasındaki değerleri alırken, bu hanenin her turunda onlar hanesi 0 ile 9 arasındaki yeni değerini alacaktır. Aynı durum onlar ve yüzler haneleri arasında gerçekleşecektir. 152

Akış Kontrol Deyimleri Bu çalışma biçiminin, içi içe üç For döngüsünden oluşan bir yapıda simülasyonunu gerçekleştirelim. <?php for ($yuzler = 0; $yuzler <= 9; $yuzler++) { for ($onlar = 0; $onlar <= 9; $onlar++) { for ($birler = 0; $birler <= 9; $birler++) { echo "$yuzler $onlar $birler <br> ; } } }?> 153

Akış Kontrol Deyimleri Biraz daha karmaşık bir örneği şu şekilde geliştirelim: A 2 +B 2 =C 2 eşitliğini sağlayan pozitif tamsayılara Pisagor Üçlüleri adı verilir. 154

Akış Kontrol Deyimleri Örneğin 3 2 +4 2 =5 2 gibi. Bu durumda (3,4,5) bir Pisagor üçlüsüdür. Öyle bir kod yazalım ki, 1 ile 99 arasındaki bütün Pisagor üçlülerini bulsun ve sonuçları ekranda biçimlendirilmiş bir şekilde yazsın. 155

Akış Kontrol Deyimleri <?php echo "<font size=\"5\">pisagor Üçlüleri</font>"; echo "<p>"; $kareler="<font color=\"#000000\"><sup>2</sup></font>"; $sayac=1; for ($a = 1; $a <= 99; $a++) { for ($b = 1; $b <= 99; $b++) { for ($c = 1; $c <= 99; $c++) { 156

Akış Kontrol Deyimleri Devamı if ($a*$a+$b*$b==$c*$c and $a<$b) { echo $sayac++,"). <font color=\"#ff0000\"><b>$a</b></font>",$kareler," + <font color=\"#ff0000\"><b>$b</b></font>",$kareler," = <font color=\"#ff0000\"><b>$c</b></font>",$kareler,"<br> "; } } } }?> 157

Akış Kontrol Deyimleri Foreach Döngüsü Genel yapısı aşağıdaki gibidir: Foreach ($dizi as $deger) { Döngü tarafından çalıştırılacak kod; } 158

Akış Kontrol Deyimleri Giriş parametresi olarak dizi kullanan Foreach döngüsü, her bir tekrarda dizinin sıradaki değerini $deger değişkenine aktarır. 159

Akış Kontrol Deyimleri <?php $dizi=array("bir","iki","üç","dört"); foreach ($dizi as $deger) { echo "$deger<br>"; }?> bir iki üç dört 160

Akış Kontrol Deyimleri <?php $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "c"; $a[1][1] = "d"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2<br> ; } }?> a b c d 161

Akış Kontrol Deyimleri Burada $v1 değişkeni $a dizinin birinci ve ikinci boyutunu oluşturan iki diziyi temsil etmektedir. $v2 değişkeni ise bu tek boyutlu dizilerin terimlerini gösterir. 162

Akış Kontrol Deyimleri Koşullu Döngüler Koşullu döngülerde, tekrarlanacak kodun tekrar sayısı bir koşul tarafından belirlenir. Bu tür döngü yapılarında otomatik olarak artan bir sayaç değişkeni bulunmamaktadır. 163

Akış Kontrol Deyimleri Koşullu döngülerin iki alt türü vardır. Bunlardan ilki koşulun döngü başlangıcında denetlendiği yapılardır. Bu durumda koşul sağlanmadığı takdirde döngü içersindeki kod hiçbir şekilde çalışmaz. 164

Akış Kontrol Deyimleri Diğer alt türde ise koşul, döngünün sonunda denetlenir. Birinci yapıdan farklı olarak bu durumda, koşul ne olursa olsun döngü içersindeki koşul en az bir defa çalıştırılacaktır. Söz edilen döngü türlerinin PHP deki karşılıkları sırasıyla While ve Do..While döngü ifadeleridir. 165

Akış Kontrol Deyimleri While Döngüsü Genel yapısı aşağıdaki gibidir: while (koşul) { Döngü tarafından çalıştırılacak kod; } 166

Akış Kontrol Deyimleri Kelime anlamı iken olan while deyimi, döngünün etki alanında kalan kodu koşul sağlandığı sürece çalıştıracaktır. Bu yapıda otomatik olarak artan bir sayaç değeri bulunmamaktadır, eğer bir sayaç kullanılması gerekiyorsa bunun kontrolünün programcı tarafından ayrıca yapılması gerekmektedir. 167

Akış Kontrol Deyimleri <?php $i=1; while ($i<=10) { echo "$i "; $i++; }?> 1 2 3 4 5 6 7 8 9 10 168

Akış Kontrol Deyimleri Döngünün çalışma şeklini daha karmaşık bir örnek üzerinde inceleyelim: 153 sayısının aşağıdaki gibi bir aritmetik özelliği vardır: 1 3 + 5 3 +3 3 = 153 169

Akış Kontrol Deyimleri Yani 153 sayısının basamaklarının küplerinin toplamı, yine sayının kendisine eşittir. Acaba 100 ile 999 arasında bu özelliğe sahip başka bir üç basamaklı sayı var mıdır? 170

Akış Kontrol Deyimleri Problemin çözümü için şu yolu izleyeceğiz: Yüzler basamağını 1 ile 9, onlar ve birler basamaklarını ise 0 ile 9 arasında bir döngüye sokarak, iç-içe oluşturulan bu döngüsel yapı içersinde basamakların küplerinin toplamının sayının bütününe eşit olup olmadığına bakacağız. 171

Akış Kontrol Deyimleri Eğer eşit ise bu sayının basamaklarını yazdıracağız. Sonuç olarak ekranda görüntülenen sayılar, 100 ile 999 arasında -eğer varsa- 153 ile aynı özelliğe sahip sayıların basamakları olacaktır. 172

Akış Kontrol Deyimleri <?php $yuzler = 1; while ($yuzler <= 9) { $onlar = 0; while ($onlar <= 9) { $birler = 0; while ($birler <= 9) { $sayi=$yuzler*100+$onlar*10+$birler; 173

Akış Kontrol Deyimleri $birler?> $onlar*$onlar*$onlar + if ($birler*$birler*$birler + $yuzler*$yuzler*$yuzler==$sayi) { echo "$yuzler - $onlar - } } $onlar++; } $yuzler++; } $birler++; <br>"; Devamı 174

Akış Kontrol Deyimleri Kod çalıştırıldığında ekranda aşağıdaki sayılar görüntülenecektir: 1-5 - 3 3-7 - 0 3-7 - 1 4-0 - 7 175

Akış Kontrol Deyimleri Aynı örneği For döngüsünü kullanarak yapınız. 176

Akış Kontrol Deyimleri Do..While Döngüsü Genel yapısı aşağıdaki gibidir: do { Döngü tarafından çalıştırılacak kod; } while (koşul); 177

Akış Kontrol Deyimleri Do..while döngüsünün While döngüsü ile arasındaki tek fark, koşulun döngü sonunda denetlenmesidir. Bunun sonucu olarak, bu yapıda döngünün etki alanında yer alan kod, koşulun sağlanıp sağlanmadığına bakmaksızın en az bir defa çalıştırılır. 178

Akış Kontrol Deyimleri <?php $i=1; do { echo "$i "; $i++; } while ($i<=10)?> 1 2 3 4 5 6 7 8 9 10 179

Akış Kontrol Deyimleri While ve do..while döngü yapıları arasındaki farkı daha açık olarak gösterebileceğimiz bir örnek geliştirelim. 180

Akış Kontrol Deyimleri $a herhangi bir pozitif tamsayı olmak üzere, bu değerden başlayarak sıradaki her terimi aşağıdaki kurala elde edilecek bir sayı dizisi oluşturalım: Eğer $a çift sayı ise bir sonraki terim=$a/2; Aksi halde bir sonraki terim=3*$a+1. 181

Akış Kontrol Deyimleri Örneğin $a=5 olsun. Bu sayı tek olduğundan bir sonraki terim, 3*5+1=16 olacaktır. 16 çift olduğundan bir sonraki terim 16/2=8 olacaktır. Böylece dizinin terimleri, 5,16,8,4,2,1,4,2,1,4,2,1, biçiminde gidecektir. 182

Akış Kontrol Deyimleri Görüldüğü gibi dizinin terimi 1 e ulaştıktan sonra 4,2,1 kısır döngüsüne ulaşmaktadır. Üstelik hangi değerle başlanırsa başlansın, sonuçta dizi mutlaka bu kısır döngüye takılıp kalmaktadır. 183

Akış Kontrol Deyimleri Bilgisayarlar kullanılarak milyonlarca başlangıç değeri için dizinin 1 değerine ulaştığının gözlemlenmesine karşın, bunun her pozitif tamsayı için böyle olacağı günümüze kadar matematiksel olarak kanıtlanamamıştır. Collatz Problemi olarak bilinen bu problem, henüz çözülmemiş ödüllü bir problemdir. 184

Akış Kontrol Deyimleri Aynı örneği, iki döngü yapısını da kullanarak yapalım. <?php $a=10; while ($a!=1) { if ($a % 2 == 0) {$a=$a/2;} else {$a=3*$a+1;} echo "$a "; }?> 185

Akış Kontrol Deyimleri <?php $a=10; do { if ($a % 2 == 0) {$a=$a/2;} else {$a=3*$a+1;} echo "$a "; } while ($a!=1)?> 186

Akış Kontrol Deyimleri Bu şekliyle her iki kod çalıştırıldığında da aynı sonuç elde edilir: 5 16 8 4 2 1 187

Akış Kontrol Deyimleri Ancak örnek kodlarda $a başlangıç değeri, $a=1; olarak belirlendiğinde iki döngü yapısının çalışma sistemleri arasındaki fark ortaya çıkacaktır. 188

Akış Kontrol Deyimleri Bu durumda while döngüsünün kullanıldığı birinci örnek kod herhangi bir çıktı üretmezken, do..while döngüsünün kullanıldığı ikinci örnek kodun çıktısı, 4 2 1 olacaktır. 189

Akış Kontrol Deyimleri Bu programı dizinin başlangıç sayısı kullanıcı tarafından girilecek şekilde tasarlayabilir misiniz? 190

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Şu ana kadar edindiğimiz bilgilerimizi kullanabileceğimiz kapsamlı bir örnek uygulama geliştirelim. Amacımız, sihirli kare adı verilen ve sayılardan oluşan karelerin bilgisayar tarafından oluşturulmasını sağlayacak bir program yazmak. Bu sayı karelerinin özelliği, satır, sütun ve köşegen üzerindeki sayıların toplamlarının eşit olmasıdır. 191

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sihirli karelerin inşası için bir çok algoritma bulunmaktadır. Bizim kullanacağımız algoritma, n bir tek sayı olmak üzere, nxn boyutunda bir sihirli karenin oluşturulmasını sağlamaktadır. Algoritma, 1 den başlayarak bütün kare doluncaya kadar sayıların kare üzerine belirli kurallar dahilinde yerleştirilmesi ilkesine dayanır. 192

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Bu kuralları aşağıdaki gibi sıralayabiliriz: KURALLAR 1. İlk sayı olan 1, karenin ilk satırının orta hücresine yerleştirilir. 2. Sıradaki her sayı, kendisinden önceki sayının sağ-üst köşesinde yer alan hücreye yerleştirilir. 193

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Bu kuralların işletilmesi sırasında ortaya çıkabilecek dört aykırı durum vardır: 1. Sıradaki sayıyı yerleştireceğimiz hücre dolu olabilir. Bu durumda sıradaki sayı, bir önceki sayının bulunduğu hücrenin altındaki hücreye yerleştirilir. 194

Öğrendiklerimizi Uygulayalım: Sihirli Kareler 2. Sıradaki sayıyı yerleştireceğimiz hücre karenin üstünden dışında kalıyor olabilir. Bu durumda sıradaki sayı, dışarıda kalan hücrenin hizasındaki sütunun en altındaki hücreye yerleştirilir. 195

Öğrendiklerimizi Uygulayalım: Sihirli Kareler 3. Sıradaki sayıyı yerleştireceğimiz hücre karenin sağ tarafından dışında kalıyor olabilir. Bu durumda sıradaki sayı, dışarıda kalan hücrenin hizasındaki satırın en solundaki hücreye yerleştirilir. 196

Öğrendiklerimizi Uygulayalım: Sihirli Kareler 4. Sıradaki sayıyı yerleştireceğimiz hücre karenin sağ-üst çaprazından dışında kalıyor olabilir. Bu durumda sıradaki sayı, bir önceki sayının bulunduğu hücrenin altındaki hücreye yerleştirilir. Üç satır ve üç sütundan oluşan sihirli kareyi algoritmanın kurallarını uygulayarak oluşturalım. 197

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Öncelikle ilk sayımız olan 1 i karenin ilk satırının orta hücresine yerleştirelim: 1 198

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sıradaki sayı olan 2, 1 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin üzerinden dışarıya çıkıldığı için 2 sayısı dışarıya çıkılan hizadaki sütunun en alt hücresine yerleştiriliyor: 1 2 199

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sıradaki sayı olan 3, 2 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin sağ tarafından dışarıya çıkıldığı için 3 sayısı dışarıya çıkılan hizadaki satırın en solundaki hücreye yerleştiriliyor: 3 1 2 200

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sıradaki sayı olan 4, 3 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak bu hücre dolu olduğu için 4 sayısı 3 sayısının bulunduğu hücrenin altında yer alan hücreye yerleştiriliyor: 1 3 4 2 201

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sıradaki sayı olan 5, 4 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleştiriliyor: 1 3 5 4 2 202

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sıradaki sayı olan 6, 5 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleştiriliyor: 1 6 3 5 4 2 203

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sıradaki sayı olan 7, 6 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin sağ-üst çaprazından dışarıya çıkıldığı için 7 sayısı 6 sayısının bulunduğu hücrenin altında yer alan hücreye yerleştiriliyor: 1 6 3 5 7 4 2 204

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sıradaki sayı olan 8, 7 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin sağ tarafından dışarıya çıkıldığı için 8 sayısı dışarıya çıkılan hizadaki satırın en solundaki hücreye yerleştiriliyor: 8 1 6 3 5 7 4 2 205

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Ve son olarak sıradaki sayı olan 9, 8 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleşecek. Ancak burada, karenin üzerinden dışarıya çıkıldığı için 9 sayısı dışarıya çıkılan hizadaki sütunun en alt hücresine yerleştiriliyor: 8 1 6 3 5 7 4 9 2 206

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Sonuç olarak elde ettiğimiz sihirli karede her satırda, her sütunda ve her iki köşegende yer alan hücrelerdeki sayıların toplamı aynıdır: 15 8 1 6 3 5 7 4 9 2 207

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Şimdi bu algoritmanın PHP de kodlamasını gerçekleştireceğiz. Programımız, bizim için n=11 boyutlu sihirli kareyi oluşturacaktır. Programda ağırlıklı olarak akış kontrol deyimlerini ve dizileri kullanacağız. 208

Öğrendiklerimizi Uygulayalım: Sihirli Kareler <?php $dizi1=range(1,11); $dizi2=range(1,11); $dizi=array($dizi1,$dizi2); $sayi=11; $sayikare=$sayi*$sayi; $toplam=0; for($i=1;$i<=$sayi;$i++) { for($j=1;$j<=$sayi;$j++) { $dizi[$i][$j]=0; } } 209

Öğrendiklerimizi Uygulayalım: Sihirli Kareler $i=1; $j=floor(($sayi+1)/2); Devamı for ($k=1;$k<=$sayikare;$k++) { if ($dizi[$i][$j]>0) { $i=$i+2; $j=$j-1; } $dizi[$i][$j]=$k; $i=$i-1; $j=$j+1; 210

Öğrendiklerimizi Uygulayalım: Sihirli Kareler if (($i==0) and ($j>$sayi)) { $i=$i+2; $j=$j-1; } if ($i==0) {$i=$sayi;} if ($j>$sayi) {$j=1;} $toplam=$toplam+$k; } echo "<table border=\"2\" align=\"center\"><tr> ; Devamı 211

Öğrendiklerimizi Uygulayalım: Sihirli Kareler for($i=1;$i<=$sayi;$i++) { echo "</tr><tr>"; for($j=1;$j<=$sayi;$j++) { $a=$dizi[$i][$j]; print "<td align=\"center\">$a</td>"; } } Devamı?> $stoplam=$toplam/$sayi; echo "<p>toplamlar : $stoplam"; echo "<p>"; echo "</table>"; 212

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Örnek kodda iki boyutlu dizi tanımlaması alternatif bir yolla yapılmıştır: $dizi1=range(1,11); $dizi2=range(1,11); $dizi=array($dizi1,$dizi2); 213

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Bu yöntemde öncelikle range fonksiyonu kullanılarak uzunluğu 11 terimden oluşan iki tane tek-boyutlu dizi tanımlanmakta, daha sonra bunlar kullanılarak 11 11=121 terimden oluşan iki boyutlu dizimiz tanımlanmaktadır. 214

Öğrendiklerimizi Uygulayalım: Sihirli Kareler Aynı programı sihirli karenin boyutu kullanıcı tarafından girilecek şekilde tasarlayabilir misiniz? 215

Fonksiyonlar Dinamik olarak kullanılabilen altprogramlar biçiminde tanımlayabileceğimiz fonksiyonlar, PHP dilinin gücünü aldığı en önemli bileşenlerdir. Şöyle ki, günümüzde yazılmış 700 den fazla dahili PHP fonksiyonu bulunmaktadır. Bunlara anonim olarak yazılmış ve İnternetten ulaşılabilen binlerce kullanıcı-tanımlı fonksiyonu da katarsak, konunun önemi ortaya çıkacaktır. 216

Fonksiyonlar Fonksiyonları yazma amacımız, çeşitli programlar tarafından kullanılan, ya da aynı program içersinde tekrarlanması gereken işlevsel kodları tekrar kullanılabilir programcıklar olarak oluşturmaktır. Bu programcıklar, ana program ile iki yönlü olarak veri alışverişinde bulunabilirler. Kendi kendilerine çalışmazlar, sadece ana program tarafından çağırıldıklarında çalışırlar. 217

Fonksiyonlar Kullanıcı-tanımlı fonksiyonlar, PHP dilini kullanarak uygulama geliştirenler tarafından yazılan fonksiyonlardır. Bunlar İnternet üzerinden yoğun olarak paylaşılmaktadır. 218

Fonksiyonlar Dahili fonksiyonlar ise doğrudan PHP çözümleyicisi tarafından denetlenen, PHP geliştirme grubu tarafından yazılmış kullanıma hazır fonksiyonlardır. 219

Fonksiyonlar Kullanıcı-Tanımlı Fonksiyonlar Kendi programlarınızda kullanmak üzere, kendi fonksiyonlarınızı yazabilirsiniz. Bunun için genel olarak aşağıdaki gibi bir tanımlama yapmanız yeterli olacaktır: function fonksiyonadı() { fonksiyon tarafından çalıştırılacak kodlar; } 220

Fonksiyonlar Bu şekilde tanımlanan bir fonksiyonu çağırmak için adını yazmamız yeterli olacaktır. Basit bir örnekle başlayalım. İşlevi ekrana adınızı yazmak olan bir fonksiyon tanımlayalım ve onu ana programımızdan çağırarak kullanalım. 221

Fonksiyonlar <html> <body> <?php function adimiyaz() { echo "Murat Sönmez"; } echo "Benim adım "; adimiyaz();?> </body> </html> Benim adım Murat Sönmez 222

Fonksiyonlar Kırmızı renkle gösterilen fonksiyon tanımı, PHP tarafından doğrudan çalıştırılmaz. Ana program bloğu içersinden çağırıldığında çalıştırılacaktır. 223

Fonksiyonlar Parametreler ve Dönen Değerler Fonksiyonlar, ana programdan farklı türlerde veriyi alabilirler. Değerleri ana programdan fonksiyonlara taşıyan bu yapılara parametre adı verilir. 224

Fonksiyonlar Bir fonksiyon, parametreleri kullanarak ya doğrudan bir işlevi yerine getirir, ya da ana program için bir değer üretir. Eğer bir değer üretmiş ise bu değerin ana programa döndürülmesi için kullanılan deyim, return deyimidir. 225

Fonksiyonlar <html> <body> <?php function adimiyaz($ad){ echo "$ad Sönmez ;} echo "Benim adım "; adimiyaz("murat"); echo "<br>kardeşimin adı ise "; adimiyaz("merve");?> </body> </html> Benim adım Murat Sönmez Kardeşimin adı ise Merve Sönmez 226

Fonksiyonlar Aşağıdaki örnekte ise, fonksiyon tarafından üretilen değer ana programa gönderilmektedir. <?php $Gelir=1100; function vergiyi_dus ($Geliriniz) { $Geliriniz = $Geliriniz - (($Geliriniz/100)*20); return $Geliriniz; } echo "$Gelir TL gelirin vergi düşülmüş hali "; echo(vergiyi_dus ($Gelir)); echo " TL dir.";?> 227

Fonksiyonlar Aynı programı gelir tutarı kullanıcı tarafından girilecek şekilde tasarlayabilir misiniz? 228

Fonksiyonlar Diğer bir örnek olarak, daha önce yapmış olduğumuz tek basamaklı bir sayının Türkçe okunuşunu yazacak programı, bu defa fonksiyon kullanarak tasarlayalım. 229

Fonksiyonlar <?php function turkce_oku ($Gelen_Sayi){ switch ($Gelen_Sayi) { case 1: $bir="bir"; break; case 2: $bir= İKİ"; break; case 3: $bir="üç"; break; case 4: $bir="dört"; break; 230

Fonksiyonlar case 5: $bir="beş"; break; case 6: $bir="alti"; break; case 7: $bir="yedi"; break; case 8: $bir="sekiz"; break; case 9: $bir="dokuz"; break; } return $bir; } Devamı 231

Fonksiyonlar $Sayi=8; echo "$Sayi Sayısının Türkçe Okunuşu : "; echo(turkce_oku ($Sayi)); Devamı?> 232

Fonksiyonlar Şimdi, çok parametreli olarak geliştirilen örnek fonksiyonumuz, iki sayı ve işlem kodunu alarak sonucu ana programa geri göndermektedir. Öncelikle kullanıcı girişi için formumuzu tasarlayalım. 233

Fonksiyonlar <form action="" method="post"> <p>birinci Sayı : <input type="text" name="sayi_1" size="4"></p> <p>ikinci Sayı : <input type="text" name="sayi_2" size="4"></p> <p>işlem Kodu : <select size="1" name="kod"> <option value="-1" selected="selected">== S E Ç İ N İ Z ==</option> <option value="1">toplama</option> <option value="2">çıkarma</option> <option value="3">bölme</option> <option value="4">çarpma</option> </select></p> <p><input name="dugme" type="submit" value="hesapla"></p> </form> 234

Fonksiyonlar Örneğimizin PHP kodundan oluşan devamı: <?php if(isset($_post["dugme"])){ function islemyap($sayi1,$sayi2,$islemkodu) { switch ($islemkodu) { case 1: $sonuc=$sayi1+$sayi2; break; case 2: $sonuc=$sayi1-$sayi2; break; case 3: $sonuc=$sayi1/$sayi2; break; 235

Fonksiyonlar case 4: $sonuc=$sayi1*$sayi2; break; } return $sonuc; } $s1=(int)$_post['sayi_1']; $s2=(int)$_post['sayi_2']; $kod=$_post['kod']; echo islemyap($s1,$s2,$kod); }?> Devamı 236

Fonksiyonlar Formdan gönderilen değerleri taşıyan HTML değişkenlerinin (sayi_1 ve sayi_2), formdan gelen değerleri tutacak PHP değişkenlerinin ($s1 ve $s2) ve fonksiyonun parametrelerinin ($sayi1 ve $sayi2) farklı isimlendirildiklerinde dikkat ediniz. 237

Fonksiyonlar Değişkenler arasındaki değer aktarmalarında, değişkenlerin isimleri değil, içinde bulundukları yapılarda yer aldıkları konumlar önemlidir. Dolayısıyla bir fonksiyon için parametrelerinin isimlerinin, ana programda karşılık gelen değişken adlarıyla aynı olması gerekmemektedir. Bu durumda hangi sıradaki parametreye hangi değerin geldiği önemli olacaktır. 238

Fonksiyonlar Dahili (İçsel) Fonksiyonlar Dahili fonksiyonlar, sayıları itibarı ile dersimiz kapsamında bütün detayı ile ele alıp anlatabileceğimiz bir konu değildir. Bu fonksiyonların öğrenilmesi daha çok, gereksinim duydukça referans kaynakları vasıtasıyla gerçekleşmektedir. 239

Fonksiyonlar Bu kesimde, PHP fonksiyonlarından ortak kullanılanlar sınıflandırılarak listelenmiş, temel işlevleri verilmiş ve mümkün olduğunca örneklendirilmeye çalışılmışlardır. 240

Fonksiyonlar Dizi Fonksiyonları Fonksiyon İşlevi array() Bir dizi tanımlar array_change_key_case() Dizinin indislerini büyük ya da küçük harf olarak değiştirir array_chunk() Diziyi böler array_combine() Bir dizinin indislerini, bir diğerinin değerlerini kullanarak yeni bir dizi oluşturur array_count_values() Her değerin dizi içersindeki tekrarlanma sayılarından yeni bir dizi oluşturur array_diff() Dizileri karşılaştırır ve farklar gönderir array_diff_assoc() Dizilerin değerlerini ve indislerini karşılaştırır ve farklar gönderir array_diff_key() Dizilerin indislerini karşılaştırır ve farklar gönderir 241

Fonksiyonlar Fonksiyon array_diff_uassoc() array_diff_ukey() array_fill() array_filter() array_flip() array_intersect() Dizi Fonksiyonları İşlevi Dizilerin değerlerini ve indislerini kullanıcıtanımlı bir fonksiyonu kullanarak karşılaştırır ve farklar gönderir Dizilerin indislerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve farklar gönderir Diziyi belirlenen değerlerle doldurur Dizinin terimlerini kullanıcı-tanımlı bir fonksiyonu kullanarak filtreler Dizideki bütün indisleri, kendileriyle ilişkilendirilmiş değerlerle yer değiştirir Dizilerin değerlerini karşılaştırarak eşleşmeleri gönderir 242

Fonksiyonlar Fonksiyon array_intersect_assoc() array_intersect_key() Dizi Fonksiyonları İşlevi Dizilerin değerlerini ve indislerini karşılaştırarak eşleşmeleri gönderir Dizilerin indislerini karşılaştırarak eşleşmeleri gönderir array_intersect_uassoc() Dizilerin değerlerini ve indislerini kullanıcıtanımlı bir fonksiyonu kullanarak karşılaştırır ve eşleşmeleri gönderir array_intersect_ukey() array_key_exists() Dizilerin indislerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve eşleşmeleri gönderir Belirli bir indisin dizide olup olmadığını denetler 243

Fonksiyonlar Dizi Fonksiyonları Fonksiyon İşlevi array_keys() Biz dizinin bütün indislerini gönderir array_map() Biz dizinin bütün terimlerini kullanıcı-tanımlı bir fonksiyona gönderir array_merge() İki ya da daha çok diziyi diğer bir dizide birleştirir array_merge_recursive() İki ya da daha çok diziyi özyinelemeli olarak diğer bir dizide birleştirir array_multisort() Çok-boyutlu dizileri sıralar array_pad() Diziye belirli sayıda terim ekler array_pop() Dizinin son terimini siler array_product() Biz dizideki terimlerin çarpımını hesaplar array_push() Bir ya da daha çok sayıda terimi dizinin sonuna yerleştirir 244

Fonksiyonlar Dizi Fonksiyonları Fonksiyon İşlevi array_rand() Diziden bir ya da daha çok rastgele anahtarı verir array_reduce() Diziyi kullanıcı-tanımlı bir fonksiyonu kullanarak string türüne dönüştürür array_reverse() Diziyi ters sıradaki biçimine dönüştürür array_search() Dizide girilen bir değeri arar ve bulunduysa indisini gönderir array_shift() Diziden ilk terimi siler ve sildiği terimini değerini gönderir array_slice() Bir dizinin belirlenen bir parçasını gönderir array_splice() Bir dizinin belirlenen terimlerini siler ve değiştirir array_sum() Dizinin terimlerinin değerlerini toplar 245

Fonksiyonlar Fonksiyon array_udiff() array_udiff_assoc() Dizi Fonksiyonları İşlevi Dizinin değerlerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve bir dizi gönderir Dizinin indislerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve bir dizi gönderir array_udiff_uassoc() Dizinin değerlerini ve indislerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve bir dizi gönderir array_uintersect() Dizinin değerlerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve bir dizi gönderir 246

Fonksiyonlar Fonksiyon array_uintersect_assoc() Dizi Fonksiyonları İşlevi Dizinin indislerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve bir dizi gönderir array_uintersect_uassoc() Dizinin değerlerini ve indislerini kullanıcıtanımlı bir fonksiyonu kullanarak karşılaştırır ve bir dizi gönderir array_unique() array_unshift() array_values() array_walk() array_walk_recursive() Diziden tekrarlanan değerleri siler Bir ya da daha çok terimi dizinin başlangıcına ekler Dizinin bütün değerlerini gönderir Kullanıcı-tanımlı bir fonksiyonu dizinin bütün terimlerine uygular Kullanıcı-tanımlı bir fonksiyonu dizinin bütün terimlerine özyinelemeli uygular 247

Fonksiyonlar Dizi Fonksiyonları Fonksiyon İşlevi arsort() Dizinin terimlerini ters sıraya dönüştürür ve indisleri buna göre düzenler asort() Diziyi sıralar ve indisleri yeniden düzenler compact() Değişkenleri ve taşıdıkları değerleri içeren bir dizi oluşturur count() Dizinin terim sayısını gönderir current() Dizinin anlık işlemdeki terimini gönderir each() Dizinin anlık işlemdeki değerini ve indisini gönderir end() İşaretçiyi dizinin son terimine yönlendirir extract() Dizinin anlık işlemdeki terimine değişken ekler 248

Fonksiyonlar Dizi Fonksiyonları Fonksiyon İşlevi in_array() Belirli bir değerin dizide bulunup bulunmadığını denetler key() Diziden bir indis çeker krsort() Diziyi indise göre ters sırada sıralar ksort() Diziyi indise göre sıralar list() Değişkenleri dizideymiş gibi atar natcasesort() Diziyi doğal sıralama algoritmasını kullanarak büyük/küçük harf duyarlı olarak sıralar natsort() Diziyi doğal sıralama algoritmasını kullanarak sıralar next() Dizinin işaretçisini bir sonraki terime öteler pos() İşaretçinin anlık işlemdeki konumunu verir prev() Dizinin işaretçisini bir önceki terime öteler range() Terim sayısı belirterek dizi oluşturur 249

Fonksiyonlar Fonksiyon reset() rsort() shuffle() sizeof() sort() uasort() uksort() usort() Dizi Fonksiyonları İşlevi İşaretçiyi dizinin ilk terimine yönlendirir Diziyi ters sırada sıralar Dizi terimlerini karıştırır Dizinin terim sayısı Diziyi sıralar Diziyi kullanıcı-tanımlı bir fonksiyon kullanarak sıralar ve indisleri yeniden düzenler Diziyi kullanıcı-tanımlı bir fonksiyon kullanarak indislerine göre sıralar Diziyi kullanıcı-tanımlı bir fonksiyon kullanarak değerlerine göre sıralar 250

Fonksiyonlar Fonksiyon İşlevi chdir() İşlemdeki dizini değiştirir chroot() O andaki işlemin kök dizinini değiştirir dir() Dizini açar closedir() Açılan dizini kapatır getcwd() Anlık işlemdeki dizini gönderir opendir() Dizini açar readdir() İşlemdeki dizinden bir girdi okur rewinddir() Anlık işlemdeki dizini sıfırlar scandir() Belirlenen konumdaki dizin ve dosyaları gönderir Dizin (Klasör) Fonksiyonları 251

Fonksiyonlar <?php print_r(scandir("odevler"));?> Array ( [0] =>. [1] =>.. [2] => 050535002.rar [3] => 050535003.rar [4] => 050535005.rar [5] => 050535006.rar [6] => 050535007.rar [7] => 050535010.rar ) 252

Fonksiyonlar Hata Fonksiyonları Fonksiyon İşlevi debug_backtrace() Geriye-doğru tarama işlemi (backtrace) başlatır debug_print_backtrace() Geriye-doğru tarama işlemini ekrana yazar error_get_last() Alınan en son hatayı verir error_log() Bir hatayı sunucunun hata izlencesine, bir dosyaya ya da belirlenecek bir uzak hedefe gönderilmesini sağlar error_reporting() Hangi hataların rapor edileceğini belirler restore_error_handler() Restores the previous error handler restore_exception_handler() Bir önceki istisnai durum ayarına döner set_error_handler() Hata takibi için bir kullanıcı-tanımlı fonksiyonu atar set_exception_handler() İstisnai durumlar için bir kullanıcı-tanımlı fonksiyonu atar 253

Fonksiyonlar Fonksiyon trigger_error() user_error() Hata Fonksiyonları İşlevi Kullanıcı-tanımlı bir hata mesajı oluşturur Kullanıcı-tanımlı bir hata mesajı oluşturur <?php $sayi=1; if ($sayi<2){ trigger_error("kullanıcı-tanımlı hata durumu tetiklendi.");}?> Programın çalışması durdurularak belirtilen hata mesajı verilecektir. 254

Fonksiyonlar Fonksiyon abs() acos() acosh() asin() asinh() atan() atan2() atanh() İşlevi Sayının mutlak değerini gönderir Sayının ters kosinüs değerini gönderir Sayının ters hiperbolik kosinüs değerini gönderir Sayının ters sinüs değerini gönderir Sayının ters hiperbolik sinüs değerini gönderir Matematik Fonksiyonları Sayının -PI/2 ve PI/2 radyan değerleri arasında kalan ters tanjant değerini gönderir Bir (x,y) noktasının açısını -PI ve PI radyan değerleri arasında nümerik olarak gönderir Sayının ters hiperbolik tanjant değerini gönderir base_convert() Sayıyı bir tabandan başka bir tabana dönüştürür 255

Fonksiyonlar Fonksiyon bindec() ceil() cos() cosh() decbin() dechex() decoct() deg2rad() Matematik Fonksiyonları İşlevi İkili (binary) tabandaki sayıyı onlu (decimal) tabana dönüştürür Sayıya en yakın bir üst tamsayıyı gönderir Sayının kosinüs değerini gönderir Sayının hiperbolik kosinüs değerini gönderir Onlu (decimal) tabandaki sayıyı ikili (binary) tabana dönüştürür Onlu (decimal) tabandaki sayıyı onaltılı (hexadecimal) tabana dönüştürür Onlu (decimal) tabandaki sayıyı sekizli (octal) tabana dönüştürür Dereceyi radyan birimine dönüştürür 256

Fonksiyonlar Fonksiyon exp() expm1() floor() fmod() getrandmax() hexdec() hypot() is_finite() is_infinite() İşlevi e x değerini gönderir e x 1 değerini gönderir Sayıya en yakın bir alt tamsayıyı gönderir Sayının bölmede kalanını (mod) gönderir Matematik Fonksiyonları rand() fonksiyonu ile elde edilebilecek en büyük rastgele sayıyı gönderir Onaltılı (hexadecimal) tabandaki sayıyı onlu (decimal) tabana dönüştürür Dik üçgenin hipotenüs uzunluğunu gönderir Değer sonlu bir sayı ise True değerini üretir Değer sonsuz bir sayı ise True değerini üretir 257

Fonksiyonlar Fonksiyon is_nan() lcg_value() log() log10() log1p() max() min() İşlevi Değer bir sayı değil ise True değerini üretir (0,1) aralığında bir pseudo rastgele sayı üretir Matematik Fonksiyonları Bir sayının E tabanındaki doğal logaritma değerini üretir Bir sayının 10 tabanındaki logaritma değerini üretir log(1+sayı) değerini üretir İki sayıdan büyük olanı gönderir İki sayıdan küçük olanı gönderir mt_getrandmax() mt_rand() fonksiyonu ile elde edilebilecek en büyük rastgele sayıyı gönderir mt_rand() Mersenne Twister algoritmasını kullanarak rastgele sayı üretir 258

Fonksiyonlar Fonksiyon İşlevi mt_srand() Mersenne Twister rastgele sayı üreticisini başlatır Matematik Fonksiyonları octdec() pi() pow() rad2deg() rand() round() sin() sinh() sqrt() Sekizli (octal) tabandaki sayıyı onlu (decimal) tabana dönüştürür PI sayısının değerini gönderir x sayısının y nci kuvvetini gönderir Radyanı dereceye dönüştürür Rastgele tamsayı üretir Sayıyı en yakın tamsayıya yuvarlar Sayının sinüs değerini gönderir Sayının hiperbolik sinüs değerini gönderir Sayının karekök değerini gönderir 259

Fonksiyonlar Fonksiyon İşlevi srand() Rastgele sayı üreticisini başlatır tan() tanh() Sayının tanjant değerini gönderir Sayının hiperbolik tanjant değerini gönderir Matematik Fonksiyonları 260

Fonksiyonlar <?php echo "ceil(6.1)=",ceil(6.1); echo "<hr>"; echo "ceil(7.9)=",ceil(7.9); echo "<hr>"; echo "round( 13.4)=",round( 13.4); echo "<hr>"; echo "round( 32.5)=",round( 32.5); echo "<hr>"; echo "floor(8.1)=",floor(8.1); echo "<hr>"; echo "floor(4.9)=",floor(4.9); echo "<hr>";?> ceil(6.1)=7 -------------------------------------------------- ceil(7.9)=8 -------------------------------------------------- round( 13.4)=13 -------------------------------------------------- round( 32.5)=33 -------------------------------------------------- floor(8.1)=8 -------------------------------------------------- floor(4.9)=4 261

Fonksiyonlar <?php /* 0-360 derece arasındaki bütün açıların sinüs, kosinüs ve tanjant değerleri hesaplanıyor. */ echo "<h1>trigonometrik Değerler Tablosu</h1> <table border=1> <tr bgcolor=#aeeef9> <td width=70>açı</td> <td width=110>sinüs</td> <td width=110>kosinüs</td> <td width=110>tanjant</td> </tr>"; for ($aci=0;$aci<=360;$aci++) { $sinus = number_format(sin(deg2rad($aci)),6); 262

Fonksiyonlar Devamı $kosinus = number_format(cos(deg2rad($aci)),6); if (!($aci==90) and!($aci==270)){ $tanjant=number_format(tan(deg2rad($aci)),6);} else{ $tanjant="=sonsuz= ;} echo " <tr bgcolor=#cacbee> <td width=70>$aci</td> <td width=110>$sinus</td> <td width=110>$kosinus</td> <td width=110>$tanjant</td> </tr> "; }?> 263

Fonksiyonlar Trigonometrik Değerler Tablosu Açı Sinüs Kosinüs Tanjant 0 0.000000 1.000000 0.000000 1 0.017452 0.999848 0.017455 2 0.034899 0.999391 0.034921 3 0.052336 0.998630 0.052408 4 0.069756 0.997564 0.069927 5 0.087156 0.996195 0.087489 6 0.104528 0.994522 0.105104............ 264

Fonksiyonlar Daha önce tek basamaklı sayılar için yaptığımız, bir sayının Türkçe okunuşu örneğini, iki basamaklı sayılar için yapalım. <?php function turkce_oku ($Gelen_Sayi){ $birler = fmod($gelen_sayi,10); $onlar = floor($gelen_sayi/10); switch ($onlar) { case 1: $on="on"; break; case 2: $on="yirmi"; break; 265

Fonksiyonlar case 3: $on="otuz"; break; case 4: $on="kirk"; break; case 5: $on="elli"; break; case 6: $on="altmiş"; break; case 7: $on="yetmiş"; break; Devamı 266

Fonksiyonlar case 8: $on="seksen"; break; case 9: $on="doksan"; break; } switch ($birler) { case 1: $bir="bir"; break; case 2: $bir= İKİ"; break; case 3: $bir="üç"; break; Devamı 267

Fonksiyonlar case 4: $bir="dört"; break; case 5: $bir="beş"; break; case 6: $bir="alti"; break; case 7: $bir="yedi"; break; case 8: $bir="sekiz"; break; Devamı 268

Fonksiyonlar case 9: $bir="dokuz"; break; } return $on.$bir; } $Sayi=48; echo "$Sayi Sayısının Türkçe Okunuşu : "; echo(turkce_oku ($Sayi));?> Bu örnekte öncelikle iki basamaklı sayı onlar ve birler basamaklarına ayrılıyor, daha sonra onlar ve birler basamağına karşılık gelen Türkçe okunuşlar belirlenerek birleştiriliyor. Devamı 269

Fonksiyonlar Burada dikkat edilmesi gereken nokta, iki basamaklı sayının nasıl basamaklarına ayrıldığıdır. Sayının 10 modundaki değeri, doğrudan birler basamağını verir: 43 mod 10 = 3 gibi Bu işlem PHP de fmod dahili fonksiyonu kullanılarak gerçekleştiriliyor: $birler = fmod($gelen_sayi,10); 270

Fonksiyonlar Onlar basamağını ise sayıyı 10 a bölüp, çıkan sonucun tam kısmını alarak elde ediyoruz. 43 / 10 = 4.3 Tam kısım (4.3) = 4 gibi Bu işlem PHP de floor dahili fonksiyonu kullanılarak gerçekleştiriliyor: $onlar = floor($gelen_sayi/10); 271

Fonksiyonlar Üç basamaklı bir sayının Türkçe okunuşunu ekrandan yazacak programı yazabilir misiniz? 272

Fonksiyonlar Karekökü tamsayı olan sayılara tamkare sayılar adı verilir. Örneğin 4, karekökü olan 2 tamsayı olduğundan bir tamkaredir. 9, 16 ve 25 de tamkare sayılardır, ancak 5,6,7,8 değildir. Yazacağımız PHP programı, 1 ile 1000 arasındaki tamkare sayıları listelesin. 273

Fonksiyonlar <?php $sayi = 1; while ( $sayi <= 1000 ) { if (floor(sqrt($sayi))==sqrt($sayi)) { echo "$sayi, ; } $sayi ++; }?> 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 274

Fonksiyonlar Bu örnekte dikkat etmemiz gereken nokta, sayının karekökünün tamsayı olup olmadığının anlaşılması için PHP fonksiyonlarının nasıl kullanıldığıdır. Bu işlem için iki matematik fonksiyonu kullanılmıştır: floor ve sqrt 275

Fonksiyonlar Eğer bir sayının karekökünün tam kısmı, sayının kareköküne eşit ise o sayı bir tamkare sayıdır: if (floor(sqrt($sayi))==sqrt($sayi)) Programın çıktısında tamkare sayılar birbirlerinden virgülle ayrılmış biçimde listelenmiştir. Ancak en sonda fazladan bir virgül basılmıştır. Koda yapacağınız bir ekleme ile bunu engelleyebilir misiniz? 276

Fonksiyonlar Fonksiyon addcslashes() addslashes() bin2hex() chop() chr() chunk_split() convert_cyr_string() convert_uudecode() İşlevi Bir stringde belirlenen karakterlerden öncesine \ karakteri ekler String Fonksiyonları Bir stringde ön tanımlı (tırnak işareti gibi) karakterlerden öncesine \ karakteri ekler Stringin ASCII karakterlerini onaltılık tabandaki değerlere dönüştürür rtrim() ile aynı işleve sahiptir Belirli bir ASCII değere karşılık gelen karakteri gönderir Stringi daha küçük parçalara böler Kril alfabesinden dönüşüm yapar uuencoded olarak şifrelenmiş stringi çözer 277

Fonksiyonlar Fonksiyon convert_uuencode() count_chars() crc32() crypt() echo() explode() fprintf() İşlevi Stringi uuencoded olarak şifreler String Fonksiyonları Bir ASCII karakterin string içersinde kaç defa geçtiğini sayar Bir string için 32-bit CRC hesabını yapar Stringi hashing metoduna göre şifreler Stringin ekran çıktısını verir Stringi diziye dönüştürür Formatlı bir stringi belirlenen çıktı formatına uygun olarak ekrana yazar get_html_translation_table() htmlspecialchars() ve htmlentities() fonksiyonları tarafından kullanılan HTML dönüşüm tablosunu verir 278

Fonksiyonlar Fonksiyon hebrev() hebrevc() html_entity_decode() htmlentities() String Fonksiyonları İşlevi Hebrew metni görsel metne dönüştürür Hebrew metni satırbaşları yaparak görsel metne dönüştürür HTML girdilerini karaktere dönüştürür Karakterleri HTML girdilerine dönüştürür htmlspecialchars_decode() Bazı ön-tanımlı HTML girdilerini (&quot gibi) karaktere dönüştürür htmlspecialchars() implode() join() Bazı ön-tanımlı karakterleri HTML girdilerine dönüştürür Biz dizinin terimlerini kullanarak string oluşturur implode() ile aynı işleve sahiptir 279

Fonksiyonlar Fonksiyon levenshtein() localeconv() ltrim() md5() md5_file() metaphone() money_format() nl_langinfo() nl2br() String Fonksiyonları İşlevi İki string arasındaki Levenshtein measafesini hesaplar Yerel sayı ve para birimi bilgisini görüntüler Stringin solunda yer alan boşlukları keser Bir stringin MD5 hash değerini hesaplar Bir dosyanın MD5 hash değerini hesaplar Bir stringin metaphone anahtarını hesaplar String biçimini para birimine dönüştürür Özel yerel bilgiyi verir Bir stirngde her yeni satırdan önce satırbaşı yapar 280

Fonksiyonlar Fonksiyon number_format() ord() parse_str() print() printf() quoted_printable_decode() quotemeta() rtrim() setlocale() İşlevi Stringi binler ayıraçlı sayı formatına dönüştürür String Fonksiyonları Bir stringin ilk karakterinin ASCII değerini verir Bir sorgulama stringini değişkenlere ayrıştırır Stringin çıktısını verir Biçimlendirilmiş (formatlı) stringin çıktısını verir Meta karakterleri tırnak içine alır Stringin sağında yer alan boşlukları keser Yerel bilgiyi ayarlar 281

Fonksiyonlar Fonksiyon sha1() sha1_file() similar_text() soundex() sprintf() sscanf() str_ireplace() String Fonksiyonları İşlevi Bir stringin SHA-1 hash değerini hesaplar Bir dosyanın SHA-1 hash değerini hesaplar İki string arasındaki benzerliği hesaplar Bir stringin soundex anahtar değerini hesaplar Formatlı bir stringi değişkene yazar Belirlenen bir formata göre stringden girdileri ayrıştırır String içinde karakter değişimi yapar (büyük/küçük harf duyarlı değildir) 282

Fonksiyonlar Fonksiyon str_pad() str_repeat() str_replace() str_rot13() str_shuffle() str_split() String Fonksiyonları İşlevi Stringin uzunluğunu belirlenen bir karakter kullanarak değiştirir Bir stringi belirlenen bir sayıda tekrarlar String içinde karakter değişimi yapar (büyük/küçük harf duyarlıdır) Bir string üzerinde ROT13 şifrelemesini çalıştırır Stringi oluşturan tüm karakterleri rastgele karıştırır Stringi diziye ayrıştırır str_word_count() Stringde yer alan kelime sayısını hesaplar strcasecmp() İki stringi karşılaştırır (büyük/küçük harf duyarlı değildir) 283

Fonksiyonlar Fonksiyon strchr() strcmp() strcoll() strcspn() strip_tags() stripcslashes() stripslashes() stripos() stristr() İşlevi String içersinde string arar String Fonksiyonları İki stringi karşılaştırır (büyük/küçük harf duyarlıdır) Yerel temelli string karşılaştırması Belirli bir string parçasından önce yer alan karakterlerin sayısını verir String içersinden HTML ve PHP etiketlerini siler addcslashes() fonksiyonu ile eklenen \ işaretlerini siler addslashes() fonksiyonu ile eklenen \ işaretlerini siler Bir string içersinde başka bir stringin ilk bulunuş konumunu verir (büyük/küçük harf duyarlı değildir) Bir string içersinde başka bir stringin ilk bulunuşunu verir (büyük/küçük harf duyarlı değildir) 284

Fonksiyonlar Fonksiyon strlen() strnatcasecmp() strnatcmp() strncasecmp() strncmp() strpbrk() strpos() İşlevi Stringin uzunluğunu gönderir String Fonksiyonları İki stringi doğal sıralama" algoritmasını kullanarak karşılaştırır (büyük/küçük harf duyarlı değildir) İki stringi doğal sıralama" algoritmasını kullanarak karşılaştırır (büyük/küçük harf duyarlıdır) İlk n karakterin string karşılaştırması (büyük/küçük harf duyarlı değildir) İlk n karakterin string karşılaştırması (büyük/küçük harf duyarlıdır) Bir string içersinde herhangi bir karakter setini arar. Bir string içersinde başka bir stringin ilk bulunuş konumunu verir büyük/küçük harf duyarlıdır) 285

Fonksiyonlar Fonksiyon strrchr() strrev() strripos() strrpos() strspn() String Fonksiyonları İşlevi Bir stringin başka bir string içersindeki son bulunuşunu verir Stringi tersine çevirir Bir string içersinde başka bir stringin en son bulunuşunun konumunu verir (büyük/küçük harf duyarlı değildir) Bir string içersinde başka bir stringin en son bulunuşunun konumunu verir (büyük/küçük harf duyarlıdır) Bir string içersinde belirlenen bir karakter listesinde yer alan karakterlerin sayısını verir 286

Fonksiyonlar Fonksiyon strstr() strtok() strtolower() strtoupper() strtr() substr() String Fonksiyonları İşlevi Bir string içersinde başka bir stringin ilk bulunuşunun konumunu verir (büyük/küçük harf duyarlıdır) Bir stringi daha küçük parçalara böler Stringi küçük harflere dönüştürür Stringi büyük harflere dönüştürür String içersinde belirlenen karakterleri dönüştürür Stringin istenen parçasını verir substr_compare() İki stringi belirlenen bir karakterden itibaren karşılaştırır (büyük/küçük harf duyarlıdır) substr_count() Bir stringde başka bir stringin bulunuş sayısını gönderir substr_replace() Bir stringin belirli bir parçasını başka bir string ile değiştirir 287

Fonksiyonlar Fonksiyon trim() ucfirst() ucwords() vfprintf() vprintf() vsprintf() wordwrap() İşlevi Stringin her iki tarafındaki boşlukları keser Stringin ilk karakterini büyük harfe dönüştürür String Fonksiyonları Stringi oluşturan her kelimenin ilk karakterini büyük harfe dönüştürür Formatlı stringin belirtilen yöne çıktısını gönderir Formatlı stringin çıktısını gönderir Formatlı stringi değişkene yazar Stringi belirli bir uzunluğa ulaştığında yeni satırlara böler 288

Fonksiyonlar Şimdi stringler üzerine bazı örnek programlar tasarlayalım. İlk örneğimizde, kullanıcının adını, soyadını ve e-posta uzantısını kullanarak e-posta adresini otomatik olarak oluşturacak programı yazalım. 289

Fonksiyonlar Uygulamamız e-posta adresini şu kurala göre oluştursun: <Adın ilk harfi>.<soyad>@<e-posta uzantısı> 290

Fonksiyonlar Örneğin adı Çetin, soyadı Öztürk olan bir kullanıcı için, gazi.edu.tr e-posta uzantısına göre, c.ozturk@gazi.edu.tr e-posta adresi oluşturulsun. 291

Fonksiyonlar Burada çözmemiz gereken en önemli problem, Türkçe harflerin benzer İngilizce harflere dönüştürülmesidir. Örneğin ğ harfinin g harfine dönüştürülmesi gibi. Bunu bizim için, yazacağımız bir dönüşüm fonksiyonu yapacak. 292

Fonksiyonlar <body> <form action="" method="post"> <p>ad : <input size="20" type="text" name="ad"></p> <p>soyad : <input size="20" type="text" name="soyad"></p> <p>e-posta Uzantısı : <input size="20" type="text" name="eposta" value="gazi.edu.tr"></p> <p><input name="dugme" type="submit" value="e- Posta Adresi"></p> </form> 293

Fonksiyonlar <?php Devamı function turkceharf_donustur ($harf) { switch ($harf) { case "ç": $harf="c"; break; case "ğ": $harf="g"; break; case "ö": $harf="o"; break; 294

Fonksiyonlar case "ş": $harf="s"; break; case "ü": $harf="u"; break; case "İ": $harf="i"; break; case "ı": $harf="i"; break; } return $harf;} Devamı 295

Fonksiyonlar function eposta_olustur ($adi, $soyadi) { $adilk=strtolower(substr($adi,0,1)); $soyad=strtolower($soyadi); $eposta = $adilk.".".$soyad; $yeni_eposta=""; for ($i = 0; $i <= strlen($eposta); $i++) { $yeni_eposta=$yeni_eposta.turkceharf_donustur( substr($eposta,$i,1)); } return $yeni_eposta; } Devamı 296

Fonksiyonlar if(isset($_post["dugme"])) { $ad = $_POST['ad']; $soyad = $_POST['soyad']; $e_posta = $_POST['eposta']; echo "<p>e-posta adresi : "; echo eposta_olustur($ad,$soyad)."@".$e_posta; }?> </body> </html> Devamı 297

Fonksiyonlar Yazdığımız turkceharf_donustur() fonksiyonu, kendisine gelen Türkçe harfi benzeri İngilizce harfe dönüştürmektedir. Önce adın ilk harfi ile soyad küçük harfe dönüştürülerek ve araya nokta işareti konularak birleştirilmektedir. Daha sonra oluşturulan bu string, harf harf fonksiyonumuza gönderilmekte ve içersinde bulunan Türkçe harfler dönüştürülmektedir. 298

Fonksiyonlar Sonuç olarak elde edilen string, e-posta uzantısı ile birleştirilmek suretiyle e-posta adresi elde edilmektedir. Aynı işleve sahip, ancak kodu önemli ölçüde azaltacak başka bir yöntemde, dönüştürme işleminde diziler kullanılmaktadır. 299

Fonksiyonlar <?php function Tr_Donustur($gelen_metin){ $gelen_metin = trim($gelen_metin); $aranan_harfler = array('ç', ğ', ı','ö', ş','ü', İ'); $degistirilecek_harfler = array('c','g','i','o','s','u','i'); return str_replace($aranan_harfler,$degistirilecek_harfle r,$gelen_metin); } if(isset($_post["dugme"])){ $ad = $_POST['ad']; $soyad = $_POST['soyad']; $e_posta = $_POST['eposta']; echo "<p>e-posta adresi : "; echo Tr_Donustur(strtolower($ad[0].".".$soyad))."@".$e_ posta; }?> 300

Fonksiyonlar strstr() fonksiyonunun kullanıldığı başka bir örnek: <?php $sifreniz = "tolgaguyer"; $adiniz = "tolga"; if ( strstr( $sifreniz, $adiniz ) ) print "Şifreniz içersinde adınız yer almamalıdır!"; else print "Teşekkürler...";?> 301

Fonksiyonlar Kullanıcı tarafından girilen bir metni Morse alfabesine göre kodlayan bir örnek: <form action="" method="post"> <p>metni Giriniz: <input type="text" name="metin" ></p> <p><input name="dugme" type="submit" ></p> </form> <?php $morsekodlari = array ('A' => '.-', 'B' => '-...', 'C' => '-.-.', 'D' => '-..', 'E' => '.', 'F' => '..-.', 'G' => '--.', 'H' => '...', 'I' => '..', 'J' => '.---,'K' => '-.-', 'L' => '.-..', 'M' => 302

Fonksiyonlar Devamı '--', 'N' => '-.', 'O' => '---', 'P' => '.--.', 'Q' => '--.-', 'R' => '.-.', 'S' => '...', 'T' => '-', 'U' => '..-', 'V' => '...-', 'W' => '.--', 'X' => '-..-', 'Y' => '-.--', 'Z' => '--..', '0' => '-----', '1' => '.----', '2' => '..---', '3' => '...--', '4' => '...-', '5' => '...', '6' => '-...', '7' => '--...', '8' => '---..', '9' => '--- -.', '.' => '.-.-.-', ',' => '--..--', ':' => '---...', '?' => '..--..', '-' => '-...-', '/' => '-..-.', '(' => '-.--.-', ' ' => '(bosluk)'); 303

Fonksiyonlar if(isset($_post["dugme"])) { $metin=$_post['metin']; $uzunluk=strlen($metin); $morsekodu=''; for($i=0;$i<=$uzunluk-1;$i++) { $morsekodu=$morsekodu. $morsekodlari[strtoupper($metin[$i])]. ' '; } echo("<strong> $morsekodu </strong>"); } Devamı?> 304

Fonksiyonlar Bu örnekte dikkat etmemiz gereken önemli bir nokta, ($metin[$i]) kullanımdır. Burada $metin bir string değişkenidir ancak $i indisi ile bir dizi gibi kullanılmıştır. 305

Fonksiyonlar Buradan çıkaracağımız sonuç, string türündeki her değişkenin, karakterlerden oluşmuş bir dizi olarak kullanılabileceği gerçeğidir. Bu özellik, stringler üzerinde işlem yaparken burada olduğu gibi bize önemli kolaylıklar sağlamaktadır. 306

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Geliştireceğimiz bu uygulama, İnternet üzerinde bilgisayar parçaları siparişi vermek için tasarlanmıştır. Uygulama iki dosyadan oluşmaktadır. İlki, sipariş formunun yer aldığı HTML uygulaması, ikincisi ise sipariş bilgilerini alarak hesaplamaları ve raporlamayı gerçekleştiren PHP uygulamasıdır. 307

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <html> <head> <title>bilgisayar Parçaları Satışı</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-9"></head> <body> <h1>bilgisayar Parçaları Satışı</h1> <h2>sipariş Formu</h2> <form action="siparisi_al.php" method=post> <table border=1> <tr bgcolor=#bee9e9> <td width=150>parça Adı</td> <td align=center width=110>birim Fiyat</td> <td width=15>adet</td> </tr> 308

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <tr bgcolor=#ffffaa> <td>kasa</td> <td align=right>85.50 TL</td> <td align=center><input type="text" name="kasa" size=3 maxlength=3></td> </tr> <td>anakart</td> <td align=right>150.00 YTL</td> <td align=center><input type="text" name="anakart" size=3 maxlength=3></td> </tr> Devamı 309

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <tr bgcolor=#ffffaa> <td>işlemci</td> <td align=right>275.30 YTL</td> <td align=center><input type="text" name="islemci" size=3 maxlength=3></td> </tr> <tr bgcolor=#ffffaa> <td>sabit Disk</td> <td align=right>120.80 YTL</td> <td align=center><input type="text" name="sabitdisk" size=3 maxlength=3></td> </tr> Devamı 310

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı <tr bgcolor=#ffffaa> <td>cd/dvd Sürücüsü</td> <td align=right>90.00 YTL</td> <td align=center><input type="text" name="cddvd" size=3 maxlength=3></td> </tr> <tr bgcolor=#ffffaa> <td>bellek</td> <td align=right>134.20 YTL</td> <td align=center><input type="text" name="bellek" size=3 maxlength=3></td> </tr> 311

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <tr bgcolor=#bee9e9> <td colspan=3 align=left><input type=submit value="siparişi Al"></td> </tr> </table> </form> Devamı </body> </html> 312

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Form çalıştırıldığında devreye siparisi_al.php dosyası girecektir. Bu dosya birim fiyat sabitlerini ve formdan gelen parça adetleri verisini kullanarak toplam tutarı hesaplayacak, string fonksiyonlarının kullanıldığı bir yöntemle bu tutarı yazı ile de yazacaktır. 313

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi siparisi_al.php <html> <head> <title>bilgisayar Parçaları Satışı</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-9"></head> <body> <h1>bilgisayar Parçaları Satışı</h1> <h2>sipariş Bilgileri</h2> 314

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <?php Devamı function birler_oku ($Gelen_Sayi){ switch ($Gelen_Sayi) { case 0: $bir=""; break; case 1: $bir="bir"; break; case 2: $bir="iki"; break; case 3: $bir="üç"; break; 315

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi case 4: $bir="dört"; break; case 5: $bir="beş"; break; case 6: $bir="alti"; break; case 7: $bir="yedi"; break; case 8: $bir="sekiz"; break; case 9: $bir="dokuz"; break; } return $bir; } Devamı 316

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi function onlar_oku ($Gelen_Sayi) { switch ($Gelen_Sayi) { case 0: $on=""; break; case 1: $on="on"; break; case 2: $on="yirmi"; break; case 3: $on="otuz"; break; case 4: $on="kirk"; break; case 5: $on="elli"; break; Devamı 317

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi case 6: $on="altmiş"; break; case 7: $on="yetmiş"; break; case 8: $on="seksen"; break; case 9: $on="doksan"; break;} return $on;} Devamı 318

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi function oku ($sayi){ $basamak_sayisi=strlen($sayi); switch ($basamak_sayisi) { case 1: $sonuc=birler_oku((int)$sayi); break; case 2: Devamı $sonuc=onlar_oku((int)$sayi[0]).birler_oku(( int)$sayi[1]); break; case 3: if ($sayi[0]=="1") { 319

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı $sonuc="yüz".onlar_oku((int)$sayi[1]).birler_oku((i nt)$sayi[2]); } else { $sonuc=birler_oku((int)$sayi[0])."yüz".onlar _oku((int)$sayi[1]).birler_oku((int)$sayi[2]); } break; case 4: if ($sayi[0]=="1") { if ($sayi[1]=="0" and $sayi[2]=="0") { 320

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi $sonuc="bin".birler_oku((int)$sayi[3]); } elseif ($sayi[1]=="0") { Devamı $sonuc="bin".onlar_oku((int)$sayi[2]).birler _oku((int)$sayi[3]); } else { if ($sayi[1]=="1") { $sonuc="binyüz".onlar_oku((int)$sayi[2]).bir ler_oku((int)$sayi[3])} else { 321

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı $sonuc="bin".birler_oku((int)$sayi[1])."yüz".onlar_ oku((int)$sayi[2]).birler_oku((int)$sayi[3]); } } } else { if ($sayi[1]=="0" and $sayi[2]=="0") { $sonuc=birler_oku((int)$sayi[0])."bin".birle r_oku((int)$sayi[3]); } elseif ($sayi[1]=="0") { 322

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı $sonuc=birler_oku((int)$sayi[0])."bin".onlar_oku((i nt)$sayi[2]).birler_oku((int)$sayi[3]); } else{ if ($sayi[1]=="1"){ $sonuc=birler_oku((int)$sayi[0])."binyüz".on lar_oku((int)$sayi[2]).birler_oku((int)$sayi[3]); } else { $sonuc=birler_oku((int)$sayi[0])."bin".birler_oku(( int)$sayi[1])."yüz".onlar_oku((int)$sayi[2]).birler _oku((int)$sayi[3]);} } } break; } return $sonuc;} 323

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi function TL_Oku ($para) { $noktayeri=strpos($para,"."); if ($noktayeri<>0) { $tl=substr($para,0,$noktayeri); Devamı $kr=substr($para,$noktayeri+1,strlen($para)- $noktayeri); return oku($tl)." TL ".oku($kr)." Kr"; } else { return oku($para)." TL";} } 324

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi echo "<p>siparişiniz "; // Siparişle ilgili bütün detaylar bu php kodu // tarafından hesaplanmaktadır. echo date("j/m/y"); echo " tarihinde, saat "; echo date("h:i"); echo " itibarı ile işleme konmuştur."; echo "<p>siparişinizle ilgili detaylar aşağıda verilmiştir:"; echo "<p>"; $kasa = (int)$_post['kasa']; $anakart = (int)$_post['anakart']; $islemci = (int)$_post['islemci']; Devamı 325

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı $sabitdisk = (int)$_post['sabitdisk']; $cddvd = (int)$_post['cddvd']; $bellek = (int)$_post['bellek']; $kasa_ucreti = (double)$_post['kasabirim']; $anakart_ucreti = (double)$_post['anakartbirim']; $islemci_ucreti = (double)$_post['islemcibirim']; $sabitdisk_ucreti = (double)$_post['sabitdiskbirim']; $cddvd_ucreti = (double)$_post['cddvdbirim']; $bellek_ucreti = (double)$_post['bellekbirim']; define("kasa_ucreti", 85.50); define("anakart_ucreti", 150.0); define("islemci_ucreti", 275.30); define("sabitdisk_ucreti", 120.80); define("cddvd_ucreti", 90.0); define("bellek_ucreti", 134.20); 326

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi define("kdv_orani", 15); $toplam_parca = 0; $toplam_tutar = 0.00; $toplam_parca = $kasa + $anakart + $islemci + $sabitdisk + $cddvd + $bellek; $toplam_birim_fiyat = kasa_ucreti + anakart_ucreti + islemci_ucreti + sabitdisk_ucreti + cddvd_ucreti + bellek_ucreti; $toplam_tutar = $kasa * kasa_ucreti + $anakart * anakart_ucreti + $islemci * islemci_ucreti + $sabitdisk * sabitdisk_ucreti + $cddvd * cddvd_ucreti + $bellek * bellek_ucreti;?> Devamı 327

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <table border=1> <tr bgcolor=#c399c3> <td width=150>parça Adý</td> <td width=25>adet</td> <td width=110 align=center>birim Fiyat</td> <td width=110 align=center>tutar</td> <td width=110 align=center>kdv (%<?php echo kdv_orani?>)</td> <td width=110 align=center>kdv Dahil Tutar</td> </tr> <tr bgcolor=#d4ffd4> <td>kasa</td> <td align=right><?php echo $kasa?></td> <td align=right> <?php echo number_format(kasa_ucreti,2)." TL"?></td> Devamı 328

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı <td align=right> <?php echo number_format($kasa * kasa_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($kasa * kasa_ucreti * $kdv_orani,2)." TL"?></td> <td align=right> <?php echo number_format($kasa * kasa_ucreti * (1 + $kdv_orani),2)." TL"?></td></tr> <tr bgcolor=#d4ffd4> <td>anakart</td> <td align=right><?php echo $anakart?></td> <td align=right> <?php echo number_format(anakart_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($anakart * anakart_ucreti,2)." TL"?></td> 329

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <td align=right> <?php echo number_format($anakart * anakart_ucreti * kdv_orani,2)." TL"?></td> <td align=right> <?php echo number_format($anakart * anakart_ucreti * (1 + kdv_orani),2)." TL"?></td></tr> <tr bgcolor=#d4ffd4> <td>ýþlemci</td> <td align=right><?php echo $islemci?></td> <td align=right> <?php echo number_format(islemci_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($islemci * islemci_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($islemci * islemci_ucreti * kdv_orani,2)." TL"?></td> Devamı 330

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı <td align=right> <?php echo number_format($islemci * islemci_ucreti * (1 + kdv_orani),2)." TL"?></td></tr> <tr bgcolor=#d4ffd4> <td>sabit Disk</td> <td align=right><?php echo $sabitdisk?></td> <td align=right> <?php echo number_format(sabitdisk_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($sabitdisk * sabitdisk_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($sabitdisk * sabitdisk_ucreti * kdv_orani,2)." TL"?></td> 331

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <td align=right> <?php echo number_format($sabitdisk * sabitdisk_ucreti * (1 + kdv_orani),2)." TL"?></td> </tr> <tr bgcolor=#d4ffd4> <td>cd/dvd Sürücüsü</td> <td align=right><?php echo $cddvd?></td> <td align=right> <?php echo number_format(cddvd_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($cddvd * cddvd_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($cddvd * cddvd_ucreti * kdv_orani,2)." TL"?></td> Devamı 332

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <td align=right> <?php echo number_format($cddvd * cddvd_ucreti * (1 + kdv_orani),2)." TL"?></td> </tr> <tr bgcolor=#d4ffd4> <td>bellek</td> <td align=right><?php echo $bellek?></td> <td align=right> <?php echo number_format(bellek_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($bellek * bellek_ucreti,2)." TL"?></td> <td align=right> <?php echo number_format($bellek * bellek_ucreti * kdv_orani,2)." TL"?></td> Devamı 333

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi Devamı <td align=right> <?php echo number_format($bellek * bellek_ucreti * (1 + kdv_orani),2)." TL"?></td></tr> <tr bgcolor=#ffffaa> <td>toplam</td> <td align=right><?php echo $toplam_parca?></td> <td align=right> <?php echo number_format($toplam_birim_fiyat,2)." TL"?></td> <td align=right> <?php echo number_format($toplam_tutar,2)." TL"?></td> <td align=right> <?php echo number_format($toplam_tutar * kdv_orani,2)." TL"?></td> 334

Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi <td align=right> <?php echo number_format($toplam_tutar * (1 + kdv_orani),2)." TL"?></td></tr></table> <?php echo "<p>yazi İLE : "; echo TL_Oku((string)(number_format($toplam_tutar * (1 + kdv_orani),2))); echo "<p>teşekkürler...";?> </body> </html> Devamı 335