tolga gÜyer ©2009-2010 bolum.pdf · bir html deyimidir. bu deyim içersinde, “size“...
Post on 04-Oct-2020
5 Views
Preview:
TRANSCRIPT
PHP Programlama2. Bölüm
Tolga GÜYER©2009-2010
İçindekiler
2PHP Programlama - 2. Bölüm Tolga GÜYER
2.1 Sözdizim Yapısı2.2 Yorum Satırları2.3 Veri Türleri2.4 Değişkenler ve Sabitler2.5 Operatörler2.6. Diziler2.7 Akış Kontrol Deyimleri
İçindekiler
3PHP Programlama - 2. Bölüm Tolga GÜYER
2.8 Öğrendiklerimizi Uygulayalım: Sihirli Kareler
2.9 Fonksiyonlar2.10 Öğrendiklerimizi Uygulayalım:
Bilgisayar Parçaları Siparişi
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.
4PHP Programlama - 2. Bölüm Tolga GÜYER
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.
5PHP Programlama - 2. Bölüm Tolga GÜYER
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.
6PHP Programlama - 2. Bölüm Tolga GÜYER
Sözdizim Yapısı
Örneğin,
7
<?phpecho “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.
PHP Programlama - 2. Bölüm Tolga GÜYER
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.
8
<html><body><?php
echo "Merhaba Dünya!";?></body></html>
PHP Programlama - 2. Bölüm Tolga GÜYER
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.
9PHP Programlama - 2. Bölüm Tolga GÜYER
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.
10PHP Programlama - 2. Bölüm Tolga GÜYER
Sözdizim Yapısı
Örneğin,
11
kodunun çıktısı aşağıdaki gibi olur:
<html><body><?php
echo "Merhaba Dünya!";?></body></html>
Merhaba Dünya!
PHP Programlama - 2. Bölüm Tolga GÜYER
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.
12PHP Programlama - 2. Bölüm Tolga GÜYER
Sözdizim Yapısı
13
<?phpecho “Merhaba ”;echo “Dünya!”;
?>
koduna ait ekran çıktısı ise;Merhaba Dünya!
biçiminde olur.
PHP Programlama - 2. Bölüm Tolga GÜYER
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.
14PHP Programlama - 2. Bölüm Tolga GÜYER
Sözdizim Yapısı
15
koduna ait ekran çıktısı;MerhabaDünya!
biçiminde olur.
<?phpecho “Merhaba”;echo “<br>”; echo “Dünya!”;
?>
PHP Programlama - 2. Bölüm Tolga GÜYER
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.
16PHP Programlama - 2. Bölüm Tolga GÜYER
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.
17PHP Programlama - 2. Bölüm Tolga GÜYER
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;
18
<?phpecho "<p><strong>Merhaba Dünya!</strong></p>";
?>
şeklindedir. Bu koda ait ekran çıktısı ise;Merhaba Dünya!
biçiminde olacaktır.PHP Programlama - 2. Bölüm
Tolga GÜYER
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.
19PHP Programlama - 2. Bölüm Tolga GÜYER
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.
20PHP Programlama - 2. Bölüm Tolga GÜYER
Sözdizim Yapısı
21PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpecho "<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ı;
Sözdizim Yapısı
22PHP Programlama - 2. Bölüm Tolga GÜYER
biçiminde olacaktır.
KATILIMCILAR
1. Murat SÖNMEZ2. Arzu ŞAFAK3. Mustafa YÜZEN4. Meral ALSANCAK
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.
23PHP Programlama - 2. Bölüm Tolga GÜYER
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.
24PHP Programlama - 2. Bölüm Tolga GÜYER
Yorum Satırları
25PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpecho ‘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.
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.
26PHP Programlama - 2. Bölüm Tolga GÜYER
Veri Türleri
Üç temel veri türünü, sayısal olmayan string-tabanlı türler (text, string, char gibi), sayısal türler (integer, double gibi) ve diziler (array) şeklinde sıralayabiliriz.
27PHP Programlama - 2. Bölüm Tolga GÜYER
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.
28PHP Programlama - 2. Bölüm Tolga GÜYER
Veri Türleri
Örneğin,2değ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.
29PHP Programlama - 2. Bölüm Tolga GÜYER
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.
30PHP Programlama - 2. Bölüm Tolga GÜYER
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.
31PHP Programlama - 2. Bölüm Tolga GÜYER
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ü.
32PHP Programlama - 2. Bölüm Tolga GÜYER
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.
33PHP Programlama - 2. Bölüm Tolga GÜYER
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.
34PHP Programlama - 2. Bölüm Tolga GÜYER
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 (ç,Ç,ğ,Ğ,ı,İ,ö,Ö,ü,Ü) bunlara dahil değildir.
35PHP Programlama - 2. Bölüm Tolga GÜYER
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 (bolumKodugibi) kullanılabilir.
36PHP Programlama - 2. Bölüm Tolga GÜYER
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:
37PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$metin=“Merhaba!";$sayi=7;
?>
Değişkenler ve Sabitler
Burada $metin, ismi “metin” olan stringtü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.
38PHP Programlama - 2. Bölüm Tolga GÜYER
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:
39PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$metin=“Merhaba!";$sayi=7;echo $metin; echo $sayi;
?>
Değişkenler ve Sabitler
Bu kodun ekran çıktısı;
40PHP Programlama - 2. Bölüm Tolga GÜYER
Merhaba!7
şeklinde olacaktır.
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:
41PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$metin="Merhaba!";$sayi=7;echo "Metin:$metin Sayı:$sayi";
?>
Değişkenler ve Sabitler
Bu kodun ekran çıktısı ise;
42PHP Programlama - 2. Bölüm Tolga GÜYER
Metin:Merhaba! Sayı:7
şeklinde olacaktır.
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:
43PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$a = 'merhaba';$$a = 'dünya';echo $merhaba;
?>
Değişkenler ve Sabitler
Bu durumda ekran çıktısı;
44PHP Programlama - 2. Bölüm Tolga GÜYER
dünya
biçiminde olacaktır.
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.
45PHP Programlama - 2. Bölüm Tolga GÜYER
Değişkenler ve Sabitler
Aynı çıktıyı aşağıdaki kod ile elde etmek mümkündür:
46PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$a = 'merhaba';$$a = 'dünya';echo "${$a}";
?>
Değişkenler ve Sabitler
Bu durumda aşağıdaki kodun ekran çıktısı;
47PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$a = 'merhaba';$$a = 'dünya';echo "$a ${$a}";
?>
merhaba dünya
biçiminde olacaktır.
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.
48PHP Programlama - 2. Bölüm Tolga GÜYER
Değişkenler ve Sabitler
Aşağıda sabit tanımlama ile ilgili örnek bir kod parçası verilmiştir:
49PHP Programlama - 2. Bölüm Tolga GÜYER
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);
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:
50PHP Programlama - 2. Bölüm Tolga GÜYER
$toplam_birim_fiyat = kasa_ucreti + anakart_ucreti+ islemci_ucreti + sabitdisk_ucreti+ cddvd_ucreti + bellek_ucreti;
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.
51PHP Programlama - 2. Bölüm Tolga GÜYER
Operatörler
1. Aritmetik Operatörler2. Değer Atama Operatörleri3. Karşılaştırma Operatörleri4. Mantıksal Operatörler
Şimdi bunları ayrı ayrı ele alalım.
52PHP Programlama - 2. Bölüm Tolga GÜYER
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.
53PHP Programlama - 2. Bölüm Tolga GÜYER
Operatörler
54PHP Programlama - 2. Bölüm Tolga GÜYER
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
37.5
% Mod (Bölmede kalan) $sonuc1=5%2$sonuc2=10%8$sonuc3=10%2
120
Operatörler
55PHP Programlama - 2. Bölüm Tolga GÜYER
Operatör Tanımı Örnek Sonuç++ Artırma $x=7
$x++ $x=8-- Azaltma $x=10
$x-- $x=9. Metinsel birleştirme $x1=“LAB”
$x2=“101”$sonuc=$x1.$x2 “LAB101”
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.
56PHP Programlama - 2. Bölüm Tolga GÜYER
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.
57PHP Programlama - 2. Bölüm Tolga GÜYER
Operatörler
58PHP Programlama - 2. Bölüm Tolga GÜYER
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
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.
59PHP Programlama - 2. Bölüm Tolga GÜYER
Operatörler
Tabloda PHP dilinde kullanılan karşılaştırma operatörleri örnekler verilerek açıklanmıştır.
60PHP Programlama - 2. Bölüm Tolga GÜYER
Operatörler
61PHP Programlama - 2. Bölüm Tolga GÜYER
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
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.
62PHP Programlama - 2. Bölüm Tolga GÜYER
Operatörler
Tabloda PHP dilinde kullanılan karşılaştırma operatörleri örnekler verilerek açıklanmıştır.
63PHP Programlama - 2. Bölüm Tolga GÜYER
Operatörler
64PHP Programlama - 2. Bölüm Tolga GÜYER
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
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.
65PHP Programlama - 2. Bölüm Tolga GÜYER
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.
66PHP Programlama - 2. Bölüm Tolga GÜYER
Diziler
Tek Boyutlu Diziler
Konuya bir örnekle başlayalım:
67PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$arabalar1="Honda";$arabalar2="Volvo";$arabalar3="BMW";$arabalar4="Toyota";
?>
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?
68PHP Programlama - 2. Bölüm Tolga GÜYER
Diziler
Aynı örneği, dizi kullanarak yapalım:
69PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.
Diziler
Aynı tanımlamayı farklı bir şekilde de yapabilirdik:
70PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.
Diziler
Her iki tanımlama için de aşağıdaki kod parçası,
71PHP Programlama - 2. Bölüm Tolga GÜYER
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.
Diziler
Dizilerin indislerinin sayısal olmaları zorunluluğu yoktur.
72PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.
Diziler
İlişkilendirilmiş İndisler
Dizileri tanımlamanın diğer bir yolu da, => operatörünü kullanarak indisle değeri doğrudan ilişkilendirmektir.
73PHP Programlama - 2. Bölüm Tolga GÜYER
Diziler
Bu duruma bir örnek aşağıda verilmiştir:
74PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.
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.
75PHP Programlama - 2. Bölüm Tolga GÜYER
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.
76PHP Programlama - 2. Bölüm Tolga GÜYER
Diziler
Örneğin, aşağıdaki veri tablosunu göz önüne alalım:
77PHP Programlama - 2. Bölüm Tolga GÜYER
Buğday Arpa Mısır Tütün
2005 145 90 210 552006 167 60 120 652007 180 45 130 1212008 317 120 134 1522009 62 261 34 135
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.
78PHP Programlama - 2. Bölüm Tolga GÜYER
Diziler
79PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.
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.
80PHP Programlama - 2. Bölüm Tolga GÜYER
Diziler
Örneğin:
81PHP Programlama - 2. Bölüm Tolga GÜYER
<?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];
?>
Diziler
Örnek koda ait ekran çıktısı aşağıdaki gibi olacaktır:
82PHP Programlama - 2. Bölüm Tolga GÜYER
GaziHacettepe1419981999
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 echosatı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.
83PHP Programlama - 2. Bölüm Tolga GÜYER
Diziler Dizilerde Kullanılan Operatörler
84PHP Programlama - 2. Bölüm Tolga GÜYER
Operatör Tanımı İşlevi$a + $b Birleştirme $a ve $b dizilerini birleştirir.
$a == $b EşitlikEğer $a ve $b dizileri aynı indislere ve değerlere sahipse TRUE değerini alır.
$a === $b DenklikEğer $a ve $b dizileri aynı indislere ve aynı türde değerlere aynı sırada sahipse TRUE değerini alır.
$a != $b$a <> $b Eşitsizlik Eğer $a ve $b dizileri eşit değilse
TRUE değerini alır.
$a !== $b Denk değil Eğer $a ve $b dizileri denk değilse TRUE değerini alır.
Diziler
85PHP Programlama - 2. Bölüm Tolga GÜYER
<?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>");
?>
elmamuzvişne
Diziler
86PHP Programlama - 2. Bölüm Tolga GÜYER
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.
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.
87PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Akış kontrol deyimlerini genel olarak koşullu ifadeler ve döngüler şeklinde iki kategoride sınıflayabiliriz.
88PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Koşullu İfadelerBilgisayarlar 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.
89PHP Programlama - 2. Bölüm Tolga GÜYER
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.
90PHP Programlama - 2. Bölüm Tolga GÜYER
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…
91PHP Programlama - 2. Bölüm Tolga GÜYER
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.
92PHP Programlama - 2. Bölüm Tolga GÜYER
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.
93PHP Programlama - 2. Bölüm Tolga GÜYER
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.
94PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
If/Elseif/ElseEn 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.
95PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Aşağıda bununla ilgili bir örnek program ve ekran çıktısı yer almaktadır.
96PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$sayi=16;if ($sayi%2==0) echo "$sayi bir çift
sayıdır.";?>
16 bir çift sayıdır.
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.
97PHP Programlama - 2. Bölüm Tolga GÜYER
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.
98PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Örnek program aşağıda verilmiştir:
99PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.
Akış Kontrol Deyimleri
Bu programla aynı sonucu, aşağıdaki kod ile de alabiliriz:
100PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.";?>
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.
101PHP Programlama - 2. Bölüm Tolga GÜYER
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.
102PHP Programlama - 2. Bölüm Tolga GÜYER
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.
103PHP Programlama - 2. Bölüm Tolga GÜYER
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.
104PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
105PHP Programlama - 2. Bölüm Tolga GÜYER
<?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“; }?>
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.
106PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
107PHP Programlama - 2. Bölüm Tolga GÜYER
<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><?phpif(isset($_POST["dugme"])){
$alisverisTutari=$_POST['tutar'];$gun=date("D");
Akış Kontrol Deyimleri
108PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
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.
109PHP Programlama - 2. Bölüm Tolga GÜYER
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}
110PHP Programlama - 2. Bölüm Tolga GÜYER
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.
111PHP Programlama - 2. Bölüm Tolga GÜYER
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.
112PHP Programlama - 2. Bölüm Tolga GÜYER
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.
113PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Kullanacağımız tablo aşağıdaki gibi olacaktır:
114PHP Programlama - 2. Bölüm Tolga GÜYER
Not Aralığı Karşılık Gelen Harf
0-19 FF20-29 FD30-39 DD40-49 DC50-59 CC60-69 CB70-79 BB80-89 BA90-100 AA
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.
115PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
116PHP Programlama - 2. Bölüm Tolga GÜYER
<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>
Akış Kontrol Deyimleri
117PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.";?>
Akış Kontrol Deyimleri
Switch/CaseAynı 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.
118PHP Programlama - 2. Bölüm Tolga GÜYER
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;} 119PHP Programlama - 2. Bölüm
Tolga GÜYER
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.
120PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
121PHP Programlama - 2. Bölüm Tolga GÜYER
<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>
Akış Kontrol Deyimleri
122PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpif(isset($_GET["dugme"])){
$Gelen_Sayi=$_GET['sayi'];switch ($Gelen_Sayi) {case "0":
$sonuc="SIFIR";break;
case "1":$sonuc="BİR";break;
case "2":$sonuc="İKİ";break;
Devamı
Akış Kontrol Deyimleri
123PHP Programlama - 2. Bölüm Tolga GÜYER
case "3":$sonuc="ÜÇ";break;
case "4":$sonuc="DÖRT";break;
case "5":$sonuc="BEŞ";
break;case "6":
$sonuc="ALTI";break;
Devamı
Akış Kontrol Deyimleri
124PHP Programlama - 2. Bölüm Tolga GÜYER
case "7":$sonuc="YEDİ";
break;case "8":
$sonuc="SEKİZ";break;
case "9":$sonuc="DOKUZ";break;
default:$sonuc="Giriş Anlaşılamadı...";
}}echo ($sonuc);?>
Devamı
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.
125PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Bunu bir örnekle açıklayalım:
126PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$i=0;switch ($i) {case 0:
echo "<br>i = 0";case 1:
echo "<br>i = 1";case 2:
echo "<br>i = 2";}?>
Akış Kontrol Deyimleri
$i=0 olmasına karşın bu koda ait ekran çıktısı:
127PHP Programlama - 2. Bölüm Tolga GÜYER
i = 0i = 1i = 2
şeklinde olacaktır.
Akış Kontrol Deyimleri
128PHP Programlama - 2. Bölüm Tolga GÜYER
<?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 = 1i = 2
Akış Kontrol Deyimleri
Aynı kodu;
129PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$i=1;switch ($i) {case 0:case 1:case 2:
echo "<br>0 < i < 3";break;
case 3:echo "<br>i = 3“; }
?>
Akış Kontrol Deyimleri
şeklinde düzenlersek ekran çıktısı:
130PHP Programlama - 2. Bölüm Tolga GÜYER
0 < i < 3
olacaktır.
Akış Kontrol Deyimleri
Kodun en doğru biçimini ise aşağıdaki gibi düzenleyebiliriz:
131PHP Programlama - 2. Bölüm Tolga GÜYER
<?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"; }?>
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 switchbloğunun ardından devam etmesini sağlayacaktır.
132PHP Programlama - 2. Bölüm Tolga GÜYER
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 echodeyimi çalıştırılacaktır.
133PHP Programlama - 2. Bölüm Tolga GÜYER
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.
134PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri PHP Öğreniyorum!
PHP Öğreniyorum!PHP Öğreniyorum!PHP Öğreniyorum!
PHP Öğreniyorum!
PHP Öğreniyorum!PHP Öğreniyorum!
135PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
İstediğimiz görüntüyü verecek kod aşağıdaki gibi olacaktır:
136PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpecho "<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>";
Akış Kontrol Deyimleri
137PHP Programlama - 2. Bölüm Tolga GÜYER
echo "<font size=6>";echo "<br><b>PHP Öğreniyorum!</b></font>";echo "<font size=7>";echo "<br><b>PHP Öğreniyorum!</b></font>";
?>
Devamı
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.
138PHP Programlama - 2. Bölüm Tolga GÜYER
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.
139PHP Programlama - 2. Bölüm Tolga GÜYER
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.
140PHP Programlama - 2. Bölüm Tolga GÜYER
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ü.
141PHP Programlama - 2. Bölüm Tolga GÜYER
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. Foreachdö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, Foreachyapısında sayaç olarak bu indis değerinin kullanıldığı söylenebilir.
142PHP Programlama - 2. Bölüm Tolga GÜYER
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;}
143PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Başlangıç değeri çoğunlukla sayaç işlevini görecek değişkene ilk değerinin atanması şeklinde belirlenir.
144PHP Programlama - 2. Bölüm Tolga GÜYER
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.
145PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Örnek olarak, daha önce yaptığımız “PHP Öğreniyorum!” uygulamasını bu kez Fordöngüsünü kullanarak gerçekleştirelim.
146PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpfor ($i=1; $i<=7; $i++){echo "<font size=$i>";echo "<br><b>PHP Öğreniyorum!</b></font>";
}?>
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.
147PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Diğer bir örnek, bilinen faktöriyel işlemini gerçekleştirecek döngünün tanımlanmasıdır.
148PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$sayi=8; $faktoryel=1;for ($i = 1; $i <= $sayi; $i++) {
$faktoryel = $faktoryel * $i; }echo $faktoryel;
?>
Akış Kontrol Deyimleri
Örnekte, 8 sayısının faktöriyeli, yani 8×7×6×5×4×3×2×1 çarpımı hesaplanmaktadır.
149PHP Programlama - 2. Bölüm Tolga GÜYER
Aynı örneği, faktöriyeli hesaplanacak sayı bir form aracılığı ilekullanıcı tarafından girilecek şekilde tasarlayabilir misiniz?
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.
150PHP Programlama - 2. Bölüm Tolga GÜYER
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.
151PHP Programlama - 2. Bölüm Tolga GÜYER
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.
152PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Bu çalışma biçiminin, içi içe üç Fordöngüsünden oluşan bir yapıda simülasyonunu gerçekleştirelim.
153PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpfor ($yuzler = 0; $yuzler <= 9; $yuzler++) { for ($onlar = 0; $onlar <= 9; $onlar++)
{ for ($birler = 0; $birler <= 9; $birler++) { echo "$yuzler $onlar $birler <br>“;
}}
}?>
Akış Kontrol Deyimleri
Biraz daha karmaşık bir örneği şu şekilde geliştirelim:
A2+B2=C2
eşitliğini sağlayan pozitif tamsayılara “Pisagor Üçlüleri” adı verilir.
154PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Örneğin32+42=52
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.
155PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
156PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpecho "<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++){
Akış Kontrol Deyimleri
157PHP Programlama - 2. Bölüm Tolga GÜYER
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>";
}}
}}
?>
Devamı
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;}
158PHP Programlama - 2. Bölüm Tolga GÜYER
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.
159PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
160PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$dizi=array("bir","iki","üç","dört");foreach ($dizi as $deger){
echo "$deger<br>";}
?>
birikiüçdört
Akış Kontrol Deyimleri
161PHP Programlama - 2. Bölüm Tolga GÜYER
<?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>“; }}
?>
abcd
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.
162PHP Programlama - 2. Bölüm Tolga GÜYER
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.
163PHP Programlama - 2. Bölüm Tolga GÜYER
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.
164PHP Programlama - 2. Bölüm Tolga GÜYER
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’dekikarşılıkları sırasıyla While ve Do..Whiledöngü ifadeleridir.
165PHP Programlama - 2. Bölüm Tolga GÜYER
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; }
166PHP Programlama - 2. Bölüm Tolga GÜYER
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.
167PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
168PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$i=1;while ($i<=10) {
echo "$i ";$i++;
}?>
1 2 3 4 5 6 7 8 9 10
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:
13 + 53 +33 = 153
169PHP Programlama - 2. Bölüm Tolga GÜYER
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?
170PHP Programlama - 2. Bölüm Tolga GÜYER
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.
171PHP Programlama - 2. Bölüm Tolga GÜYER
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.
172PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
173PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$yuzler = 1;
while ($yuzler <= 9) {
$onlar = 0;while ($onlar <= 9){
$birler = 0;while ($birler <= 9){
$sayi=$yuzler*100+$onlar*10+$birler;
Akış Kontrol Deyimleri
174PHP Programlama - 2. Bölüm Tolga GÜYER
if ($birler*$birler*$birler +
$onlar*$onlar*$onlar +
$yuzler*$yuzler*$yuzler==$sayi){
echo "$yuzler - $onlar -$birler <br>";
}$birler++;
}$onlar++;
}$yuzler++;
}?>
Devamı
Akış Kontrol Deyimleri
Kod çalıştırıldığında ekranda aşağıdaki sayılar görüntülenecektir:
175PHP Programlama - 2. Bölüm Tolga GÜYER
1 - 5 - 3 3 - 7 - 0 3 - 7 - 1 4 - 0 - 7
Akış Kontrol Deyimleri
176PHP Programlama - 2. Bölüm Tolga GÜYER
Aynı örneği For döngüsünü kullanarak yapınız.
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);
177PHP Programlama - 2. Bölüm Tolga GÜYER
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.
178PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
179PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$i=1;do{
echo "$i ";$i++;
}while ($i<=10)
?>
1 2 3 4 5 6 7 8 9 10
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.
180PHP Programlama - 2. Bölüm Tolga GÜYER
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.
181PHP Programlama - 2. Bölüm Tolga GÜYER
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.
182PHP Programlama - 2. Bölüm Tolga GÜYER
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.
183PHP Programlama - 2. Bölüm Tolga GÜYER
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.
184PHP Programlama - 2. Bölüm Tolga GÜYER
Akış Kontrol Deyimleri
Aynı örneği, iki döngü yapısını da kullanarak yapalım.
185PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$a=10;while ($a!=1){
if ($a % 2 == 0) {$a=$a/2;} else {$a=3*$a+1;} echo "$a ";
} ?>
Akış Kontrol Deyimleri
186PHP Programlama - 2. Bölüm Tolga GÜYER
<?php$a=10;do{
if ($a % 2 == 0) {$a=$a/2;} else {$a=3*$a+1;} echo "$a ";
}while ($a!=1)
?>
Akış Kontrol Deyimleri
Bu şekliyle her iki kod çalıştırıldığında da aynı sonuç elde edilir:
187PHP Programlama - 2. Bölüm Tolga GÜYER
5 16 8 4 2 1
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.
188PHP Programlama - 2. Bölüm Tolga GÜYER
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ı,
189PHP Programlama - 2. Bölüm Tolga GÜYER
4 2 1
olacaktır.
Akış Kontrol Deyimleri
190PHP Programlama - 2. Bölüm Tolga GÜYER
Bu programı dizinin başlangıç sayısı kullanıcı tarafından girilecek şekilde tasarlayabilir misiniz?
Öğ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.
191PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSihirli karelerin inşası için bir çok algoritma bulunmaktadır. Bizim kullanacağımız algoritma, n bir tek sayı olmak üzere, nxnboyutunda 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.
192PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli KarelerBu kuralları aşağıdaki gibi sıralayabiliriz:KURALLAR1. İ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.
193PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli KarelerBu 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.
194PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli Kareler2. 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.
195PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli Kareler3. 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.
196PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli Kareler4. 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.
197PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli KarelerÖncelikle ilk sayımız olan 1’i karenin ilk satırının orta hücresine yerleştirelim:
198PHP Programlama - 2. Bölüm Tolga GÜYER
1
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSı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:
199PHP Programlama - 2. Bölüm Tolga GÜYER
1
2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSı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:
200PHP Programlama - 2. Bölüm Tolga GÜYER
13
2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSı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:
201PHP Programlama - 2. Bölüm Tolga GÜYER
134 2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSıradaki sayı olan 5, 4 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleştiriliyor:
202PHP Programlama - 2. Bölüm Tolga GÜYER
13 54 2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSıradaki sayı olan 6, 5 sayısının bulunduğu hücrenin sağ-üst köşesindeki hücreye yerleştiriliyor:
203PHP Programlama - 2. Bölüm Tolga GÜYER
1 63 54 2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSı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:
204PHP Programlama - 2. Bölüm Tolga GÜYER
1 63 5 74 2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSı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:
205PHP Programlama - 2. Bölüm Tolga GÜYER
8 1 63 5 74 2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerVe 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:
206PHP Programlama - 2. Bölüm Tolga GÜYER
8 1 63 5 74 9 2
Öğrendiklerimizi Uygulayalım: Sihirli KarelerSonuç 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
207PHP Programlama - 2. Bölüm Tolga GÜYER
8 1 63 5 74 9 2
Öğ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.
208PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli Kareler
209PHP Programlama - 2. Bölüm Tolga GÜYER
<?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;}
}
Öğrendiklerimizi Uygulayalım: Sihirli Kareler
210PHP Programlama - 2. Bölüm Tolga GÜYER
$i=1;$j=floor(($sayi+1)/2);
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;
Devamı
Öğrendiklerimizi Uygulayalım: Sihirli Kareler
211PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
Öğrendiklerimizi Uygulayalım: Sihirli Kareler
212PHP Programlama - 2. Bölüm Tolga GÜYER
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>";}
}
$stoplam=$toplam/$sayi;echo "<p>Toplamlar : $stoplam";echo "<p>";echo "</table>";
?>
Devamı
Öğ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);
213PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli KarelerBu 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.
214PHP Programlama - 2. Bölüm Tolga GÜYER
Öğrendiklerimizi Uygulayalım: Sihirli Kareler
215PHP Programlama - 2. Bölüm Tolga GÜYER
Aynı programı sihirli karenin boyutu kullanıcı tarafından girilecek şekilde tasarlayabilir misiniz?
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.
216PHP Programlama - 2. Bölüm Tolga GÜYER
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.
217PHP Programlama - 2. Bölüm Tolga GÜYER
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.
218PHP Programlama - 2. Bölüm Tolga GÜYER
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.
219PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyonlar
Kullanıcı-Tanımlı FonksiyonlarKendi 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; }
220PHP Programlama - 2. Bölüm Tolga GÜYER
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.
221PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyonlar
222PHP Programlama - 2. Bölüm Tolga GÜYER
<html><body><?phpfunction adimiYaz(){
echo "Murat Sönmez";}
echo "Benim adım ";adimiYaz();
?>
</body></html>
Benim adım Murat Sönmez
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.
223PHP Programlama - 2. Bölüm Tolga GÜYER
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.
224PHP Programlama - 2. Bölüm Tolga GÜYER
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.
225PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyonlar
226PHP Programlama - 2. Bölüm Tolga GÜYER
<html><body>
<?phpfunction 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önmezKardeşimin adı ise Merve Sönmez
Fonksiyonlar
Aşağıdaki örnekte ise, fonksiyon tarafından üretilen değer ana programa gönderilmektedir.
227PHP Programlama - 2. Bölüm Tolga GÜYER
<?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.";
?>
Fonksiyonlar
228PHP Programlama - 2. Bölüm Tolga GÜYER
Aynı programı gelir tutarı kullanıcı tarafından girilecek şekildetasarlayabilir misiniz?
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.
229PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyonlar
230PHP Programlama - 2. Bölüm Tolga GÜYER
<?php
function turkce_oku ($Gelen_Sayi){switch ($Gelen_Sayi) {case 1:
$bir="BİR";break;
case 2:$bir=“İKİ";break;
case 3:$bir="ÜÇ";break;
case 4:$bir="DÖRT";break;
Fonksiyonlar
231PHP Programlama - 2. Bölüm Tolga GÜYER
case 5:$bir="BEŞ";break;
case 6:$bir="ALTI";break;
case 7:$bir="YEDİ";break;
case 8:$bir="SEKİZ";break;
case 9:$bir="DOKUZ";break; }
return $bir;}
Devamı
Fonksiyonlar
232PHP Programlama - 2. Bölüm Tolga GÜYER
$Sayi=8;echo "$Sayi Sayısının Türkçe Okunuşu : "; echo(turkce_oku ($Sayi));
?>
Devamı
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.
233PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyonlar
234PHP Programlama - 2. Bölüm Tolga GÜYER
<form action="" method="post"><p>Birinci Sayı : <input type="text" name="sayi_1" size="4"></p><p>İkinci Sayı : <input type="text" name="sayi_2" size="4"></p><p>İş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>
Fonksiyonlar
Örneğimizin PHP kodundan oluşan devamı:
235PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpif(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;
Fonksiyonlar
236PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
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.
237PHP Programlama - 2. Bölüm Tolga GÜYER
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.
238PHP Programlama - 2. Bölüm Tolga GÜYER
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.
239PHP Programlama - 2. Bölüm Tolga GÜYER
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.
240PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyonlar
241PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyon İşleviarray() Bir dizi tanımlararray_change_key_case() Dizinin indislerini büyük ya da küçük harf
olarak değiştirirarray_chunk() Diziyi bölerarray_combine() Bir dizinin indislerini, bir diğerinin değerlerini
kullanarak yeni bir dizi oluştururarray_count_values() Her değerin dizi içersindeki tekrarlanma
sayılarından yeni bir dizi oluştururarray_diff() Dizileri karşılaştırır ve farklar gönderirarray_diff_assoc() Dizilerin değerlerini ve indislerini karşılaştırır
ve farklar gönderirarray_diff_key() Dizilerin indislerini karşılaştırır ve farklar
gönderir
Dizi Fonksiyonları
Fonksiyonlar
242PHP Programlama - 2. Bölüm Tolga GÜYER
Fonksiyon İşleviarray_diff_uassoc() Dizilerin değerlerini ve indislerini kullanıcı-
tanımlı bir fonksiyonu kullanarak karşılaştırır ve farklar gönderir
array_diff_ukey() Dizilerin indislerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve farklar gönderir
array_fill() Diziyi belirlenen değerlerle doldururarray_filter() Dizinin terimlerini kullanıcı-tanımlı bir
fonksiyonu kullanarak filtrelerarray_flip() Dizideki bütün indisleri, kendileriyle
ilişkilendirilmiş değerlerle yer değiştirirarray_intersect() Dizilerin değerlerini karşılaştırarak eşleşmeleri
gönderir
Dizi Fonksiyonları
Fonksiyonlar
243PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşleviarray_intersect_assoc() Dizilerin değerlerini ve indislerini
karşılaştırarak eşleşmeleri gönderirarray_intersect_key() Dizilerin indislerini karşılaştırarak eşleşmeleri
gönderirarray_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() Dizilerin indislerini kullanıcı-tanımlı bir fonksiyonu kullanarak karşılaştırır ve eşleşmeleri gönderir
array_key_exists() Belirli bir indisin dizide olup olmadığını denetler
Fonksiyonlar
244PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşleviarray_keys() Biz dizinin bütün indislerini gönderirarray_map() Biz dizinin bütün terimlerini kullanıcı-tanımlı
bir fonksiyona gönderirarray_merge() İki ya da daha çok diziyi diğer bir dizide
birleştirirarray_merge_recursive() İki ya da daha çok diziyi özyinelemeli olarak
diğer bir dizide birleştirirarray_multisort() Çok-boyutlu dizileri sıralararray_pad() Diziye belirli sayıda terim eklerarray_pop() Dizinin son terimini silerarray_product() Biz dizideki terimlerin çarpımını hesaplararray_push() Bir ya da daha çok sayıda terimi dizinin sonuna
yerleştirir
Fonksiyonlar
245PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşleviarray_rand() Diziden bir ya da daha çok rastgele anahtarı verirarray_reduce() Diziyi kullanıcı-tanımlı bir fonksiyonu kullanarak
string türüne dönüştürürarray_reverse() Diziyi ters sıradaki biçimine dönüştürürarray_search() Dizide girilen bir değeri arar ve bulunduysa
indisini gönderirarray_shift() Diziden ilk terimi siler ve sildiği terimini değerini
gönderirarray_slice() Bir dizinin belirlenen bir parçasını gönderirarray_splice() Bir dizinin belirlenen terimlerini siler ve değiştirirarray_sum() Dizinin terimlerinin değerlerini toplar
Fonksiyonlar
246PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşleviarray_udiff() Dizinin değerlerini kullanıcı-tanımlı bir
fonksiyonu kullanarak karşılaştırır ve bir dizi gönderir
array_udiff_assoc() 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
Fonksiyonlar
247PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşleviarray_uintersect_assoc() 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() Diziden tekrarlanan değerleri silerarray_unshift() Bir ya da daha çok terimi dizinin başlangıcına
eklerarray_values() Dizinin bütün değerlerini gönderirarray_walk() Kullanıcı-tanımlı bir fonksiyonu dizinin bütün
terimlerine uygulararray_walk_recursive() Kullanıcı-tanımlı bir fonksiyonu dizinin bütün
terimlerine özyinelemeli uygular
Fonksiyonlar
248PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşleviarsort() Dizinin terimlerini ters sıraya dönüştürür ve indisleri buna
göre düzenlerasort() Diziyi sıralar ve indisleri yeniden düzenlercompact() Değişkenleri ve taşıdıkları değerleri içeren bir dizi oluştururcount() Dizinin terim sayısını gönderircurrent() Dizinin anlık işlemdeki terimini gönderireach() Dizinin anlık işlemdeki değerini ve indisini gönderirend() İşaretçiyi dizinin son terimine yönlendirirextract() Dizinin anlık işlemdeki terimine değişken ekler
Fonksiyonlar
249PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşleviin_array() Belirli bir değerin dizide bulunup bulunmadığını denetlerkey() Diziden bir indis çekerkrsort() Diziyi indise göre ters sırada sıralarksort() Diziyi indise göre sıralarlist() Değişkenleri dizideymiş gibi atarnatcasesort() Diziyi “doğal sıralama” algoritmasını kullanarak
büyük/küçük harf duyarlı olarak sıralarnatsort() Diziyi “doğal sıralama” algoritmasını kullanarak sıralarnext() Dizinin işaretçisini bir sonraki terime ötelerpos() İşaretçinin anlık işlemdeki konumunu verirprev() Dizinin işaretçisini bir önceki terime ötelerrange() Terim sayısı belirterek dizi oluşturur
Fonksiyonlar
250PHP Programlama - 2. Bölüm Tolga GÜYER
Dizi Fonksiyonları
Fonksiyon İşlevireset() İşaretçiyi dizinin ilk terimine yönlendirirrsort() Diziyi ters sırada sıralarshuffle() Dizi terimlerini karıştırırsizeof() Dizinin terim sayısısort() Diziyi sıralaruasort() Diziyi kullanıcı-tanımlı bir fonksiyon kullanarak sıralar ve
indisleri yeniden düzenleruksort() Diziyi kullanıcı-tanımlı bir fonksiyon kullanarak indislerine
göre sıralarusort() Diziyi kullanıcı-tanımlı bir fonksiyon kullanarak
değerlerine göre sıralar
Fonksiyonlar
251PHP Programlama - 2. Bölüm Tolga GÜYER
Dizin (Klasör) Fonksiyonları
Fonksiyon İşlevichdir() İşlemdeki dizini değiştirirchroot() O andaki işlemin kök dizinini değiştirirdir() Dizini açarclosedir() Açılan dizini kapatırgetcwd() Anlık işlemdeki dizini gönderiropendir() Dizini açarreaddir() İşlemdeki dizinden bir girdi okurrewinddir() Anlık işlemdeki dizini sıfırlarscandir() Belirlenen konumdaki dizin ve dosyaları gönderir
Fonksiyonlar
252PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpprint_r(scandir("odevler"));
?>
Array([0] => .[1] => ..[2] => 050535002.rar[3] => 050535003.rar[4] => 050535005.rar[5] => 050535006.rar[6] => 050535007.rar[7] => 050535010.rar)
Fonksiyonlar
253PHP Programlama - 2. Bölüm Tolga GÜYER
Hata Fonksiyonları
Fonksiyon İşlevidebug_backtrace() Geriye-doğru tarama işlemi (backtrace)
başlatırdebug_print_backtrace() Geriye-doğru tarama işlemini ekrana yazarerror_get_last() Alınan en son hatayı verirerror_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 belirlerrestore_error_handler() Restores the previous error handlerrestore_exception_handler() Bir önceki istisnai durum ayarına dönerset_error_handler() Hata takibi için bir kullanıcı-tanımlı
fonksiyonu atarset_exception_handler() İstisnai durumlar için bir kullanıcı-tanımlı
fonksiyonu atar
Fonksiyonlar
254PHP Programlama - 2. Bölüm Tolga GÜYER
Hata Fonksiyonları
Fonksiyon İşlevitrigger_error() Kullanıcı-tanımlı bir hata mesajı oluştururuser_error() Kullanıcı-tanımlı bir hata mesajı oluşturur
<?php$sayi=1;if ($sayi<2){
trigger_error("Kullanıcı-tanımlı hatadurumu tetiklendi.");}?>
Programın çalışması durdurularak belirtilen hata mesajı verilecektir.
Fonksiyonlar
255PHP Programlama - 2. Bölüm Tolga GÜYER
Matematik Fonksiyonları
Fonksiyon İşlevi
abs() Sayının mutlak değerini gönderiracos() Sayının ters kosinüs değerini gönderiracosh() Sayının ters hiperbolik kosinüs değerini gönderirasin() Sayının ters sinüs değerini gönderirasinh() Sayının ters hiperbolik sinüs değerini gönderiratan() Sayının -PI/2 ve PI/2 radyan değerleri arasında kalan ters
tanjant değerini gönderir atan2() Bir (x,y) noktasının açısını -PI ve PI radyan değerleri
arasında nümerik olarak gönderiratanh() Sayının ters hiperbolik tanjant değerini gönderirbase_convert() Sayıyı bir tabandan başka bir tabana dönüştürür
Fonksiyonlar
256PHP Programlama - 2. Bölüm Tolga GÜYER
Matematik Fonksiyonları
Fonksiyon İşlevi
bindec() İkili (binary) tabandaki sayıyı onlu (decimal) tabana dönüştürür
ceil() Sayıya en yakın bir üst tamsayıyı gönderircos() Sayının kosinüs değerini gönderircosh() Sayının hiperbolik kosinüs değerini gönderirdecbin() Onlu (decimal) tabandaki sayıyı ikili (binary) tabana
dönüştürürdechex() Onlu (decimal) tabandaki sayıyı onaltılı (hexadecimal)
tabana dönüştürürdecoct() Onlu (decimal) tabandaki sayıyı sekizli (octal) tabana
dönüştürürdeg2rad() Dereceyi radyan birimine dönüştürür
Fonksiyonlar
257PHP Programlama - 2. Bölüm Tolga GÜYER
Matematik Fonksiyonları
Fonksiyon İşlevi
exp() ex değerini gönderirexpm1() ex – 1 değerini gönderirfloor() Sayıya en yakın bir alt tamsayıyı gönderirfmod() Sayının bölmede kalanını (mod) gönderirgetrandmax() rand() fonksiyonu ile elde edilebilecek en büyük
rastgele sayıyı gönderirhexdec() Onaltılı (hexadecimal) tabandaki sayıyı onlu (decimal)
tabana dönüştürürhypot() Dik üçgenin hipotenüs uzunluğunu gönderiris_finite() Değer sonlu bir sayı ise True değerini üretiris_infinite() Değer sonsuz bir sayı ise True değerini üretir
Fonksiyonlar
258PHP Programlama - 2. Bölüm Tolga GÜYER
Matematik Fonksiyonları
Fonksiyon İşlevi
is_nan() Değer bir sayı değil ise True değerini üretirlcg_value() (0,1) aralığında bir pseudo rastgele sayı üretirlog() Bir sayının E tabanındaki doğal logaritma değerini
üretirlog10() Bir sayının 10 tabanındaki logaritma değerini üretirlog1p() log(1+sayı) değerini üretirmax() İki sayıdan büyük olanı gönderirmin() İki sayıdan küçük olanı gönderirmt_getrandmax() mt_rand() fonksiyonu ile elde edilebilecek en büyük
rastgele sayıyı gönderirmt_rand() Mersenne Twister algoritmasını kullanarak rastgele sayı
üretir
Fonksiyonlar
259PHP Programlama - 2. Bölüm Tolga GÜYER
Matematik Fonksiyonları
Fonksiyon İşlevi
mt_srand() Mersenne Twister rastgele sayı üreticisini başlatıroctdec() Sekizli (octal) tabandaki sayıyı onlu (decimal) tabana
dönüştürürpi() PI sayısının değerini gönderirpow() x sayısının y’nci kuvvetini gönderirrad2deg() Radyanı dereceye dönüştürürrand() Rastgele tamsayı üretirround() Sayıyı en yakın tamsayıya yuvarlarsin() Sayının sinüs değerini gönderirsinh() Sayının hiperbolik sinüs değerini gönderirsqrt() Sayının karekök değerini gönderir
Fonksiyonlar
260PHP Programlama - 2. Bölüm Tolga GÜYER
Matematik Fonksiyonları
Fonksiyon İşlevi
srand() Rastgele sayı üreticisini başlatırtan() Sayının tanjant değerini gönderirtanh() Sayının hiperbolik tanjant değerini gönderir
Fonksiyonlar
261PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpecho "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
Fonksiyonlar
262PHP Programlama - 2. Bölüm Tolga GÜYER
<?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);
Fonksiyonlar
263PHP Programlama - 2. Bölüm Tolga GÜYER
$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>
";}
?>
Devamı
Fonksiyonlar
264PHP Programlama - 2. Bölüm Tolga GÜYER
Trigonometrik Değerler TablosuAçı Sinüs Kosinüs Tanjant0 0.000000 1.000000 0.0000001 0.017452 0.999848 0.0174552 0.034899 0.999391 0.0349213 0.052336 0.998630 0.0524084 0.069756 0.997564 0.0699275 0.087156 0.996195 0.0874896 0.104528 0.994522 0.105104... ... ... ...
Fonksiyonlar
265PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpfunction turkce_oku ($Gelen_Sayi){$birler = fmod($Gelen_Sayi,10);$onlar = floor($Gelen_Sayi/10);switch ($onlar) {case 1:
$on="ON";break;
case 2:$on="YİRMİ";break;
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.
Fonksiyonlar
266PHP Programlama - 2. Bölüm Tolga GÜYER
case 3:$on="OTUZ";break;
case 4:$on="KIRK";break;
case 5:$on="ELLİ";break;
case 6:$on="ALTMIŞ";break;
case 7:$on="YETMİŞ";break;
Devamı
Fonksiyonlar
267PHP Programlama - 2. Bölüm Tolga GÜYER
case 8:$on="SEKSEN";break;
case 9:$on="DOKSAN";break; }
switch ($birler) {case 1:
$bir="BİR";break;
case 2:$bir=“İKİ";break;
case 3:$bir="ÜÇ";break;
Devamı
Fonksiyonlar
268PHP Programlama - 2. Bölüm Tolga GÜYER
case 4:$bir="DÖRT";break;
case 5:$bir="BEŞ";break;
case 6:$bir="ALTI";break;
case 7:$bir="YEDİ";break;
case 8:$bir="SEKİZ";break;
Devamı
Fonksiyonlar
269PHP Programlama - 2. Bölüm Tolga GÜYER
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));?>
Devamı
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.
Fonksiyonlar
270PHP Programlama - 2. Bölüm Tolga GÜYER
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);
Fonksiyonlar
271PHP Programlama - 2. Bölüm Tolga GÜYER
Onlar basamağını ise sayıyı 10’a bölüp, çıkan sonucun tam kısmını alarak elde ediyoruz.
43 / 10 = 4.3Tam 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);
Fonksiyonlar
272PHP Programlama - 2. Bölüm Tolga GÜYER
Üç basamaklı bir sayının Türkçe okunuşunu ekrandanyazacak programı yazabilir misiniz?
Fonksiyonlar
273PHP Programlama - 2. Bölüm Tolga GÜYER
Karekökü tamsayı olan sayılara “tamkaresayı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.
Fonksiyonlar
274PHP Programlama - 2. Bölüm Tolga GÜYER
<?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,
Fonksiyonlar
275PHP Programlama - 2. Bölüm Tolga GÜYER
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”
Fonksiyonlar
276PHP Programlama - 2. Bölüm Tolga GÜYER
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 tamkaresayıdır:
if (floor(sqrt($sayi))==sqrt($sayi))
Programın çıktısında tamkare sayılar birbirlerinden virgülleayrılmış biçimde listelenmiştir. Ancak en sonda fazladan birvirgül basılmıştır.Koda yapacağınız bir ekleme ile bunu engelleyebilir misiniz?
Fonksiyonlar
277PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşleviaddcslashes() Bir stringde belirlenen karakterlerden
öncesine \ karakteri ekleraddslashes() Bir stringde ön tanımlı (tırnak işareti gibi)
karakterlerden öncesine \ karakteri eklerbin2hex() Stringin ASCII karakterlerini onaltılık
tabandaki değerlere dönüştürürchop() rtrim() ile aynı işleve sahiptirchr() Belirli bir ASCII değere karşılık gelen
karakteri gönderirchunk_split() Stringi daha küçük parçalara bölerconvert_cyr_string() Kril alfabesinden dönüşüm yaparconvert_uudecode() uuencoded olarak şifrelenmiş stringi çözer
Fonksiyonlar
278PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşleviconvert_uuencode() Stringi uuencoded olarak şifrelercount_chars() Bir ASCII karakterin string içersinde kaç
defa geçtiğini sayarcrc32() Bir string için 32-bit CRC hesabını yaparcrypt() Stringi hashing metoduna göre şifrelerecho() Stringin ekran çıktısını verirexplode() Stringi diziye dönüştürürfprintf() Formatlı bir stringi belirlenen çıktı
formatına uygun olarak ekrana yazarget_html_translation_table() htmlspecialchars() ve htmlentities()
fonksiyonları tarafından kullanılan HTML dönüşüm tablosunu verir
Fonksiyonlar
279PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevihebrev() Hebrew metni görsel metne dönüştürürhebrevc() Hebrew metni satırbaşları yaparak görsel
metne dönüştürürhtml_entity_decode() HTML girdilerini karaktere dönüştürürhtmlentities() Karakterleri HTML girdilerine dönüştürürhtmlspecialchars_decode() Bazı ön-tanımlı HTML girdilerini (" gibi)
karaktere dönüştürürhtmlspecialchars() Bazı ön-tanımlı karakterleri HTML girdilerine
dönüştürürimplode() Biz dizinin terimlerini kullanarak string
oluştururjoin() implode() ile aynı işleve sahiptir
Fonksiyonlar
280PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevilevenshtein() İki string arasındaki Levenshtein measafesini
hesaplarlocaleconv() Yerel sayı ve para birimi bilgisini görüntülerltrim() Stringin solunda yer alan boşlukları kesermd5() Bir stringin MD5 hash değerini hesaplarmd5_file() Bir dosyanın MD5 hash değerini hesaplarmetaphone() Bir stringin metaphone anahtarını hesaplarmoney_format() String biçimini para birimine dönüştürürnl_langinfo() Özel yerel bilgiyi verirnl2br() Bir stirngde her yeni satırdan önce satırbaşı
yapar
Fonksiyonlar
281PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevinumber_format() Stringi binler ayıraçlı sayı formatına
dönüştürürord() Bir stringin ilk karakterinin ASCII değerini
verirparse_str() Bir sorgulama stringini değişkenlere ayrıştırırprint() Stringin çıktısını verirprintf() Biçimlendirilmiş (formatlı) stringin çıktısını
verirquoted_printable_decode()quotemeta() Meta karakterleri tırnak içine alırrtrim() Stringin sağında yer alan boşlukları kesersetlocale() Yerel bilgiyi ayarlar
Fonksiyonlar
282PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevisha1() Bir stringin SHA-1 hash değerini hesaplarsha1_file() Bir dosyanın SHA-1 hash değerini hesaplarsimilar_text() İki string arasındaki benzerliği hesaplarsoundex() Bir stringin soundex anahtar değerini hesaplarsprintf() Formatlı bir stringi değişkene yazarsscanf() Belirlenen bir formata göre stringden girdileri
ayrıştırırstr_ireplace() String içinde karakter değişimi yapar
(büyük/küçük harf duyarlı değildir)
Fonksiyonlar
283PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevistr_pad() Stringin uzunluğunu belirlenen bir karakter kullanarak
değiştirirstr_repeat() Bir stringi belirlenen bir sayıda tekrarlarstr_replace() String içinde karakter değişimi yapar (büyük/küçük
harf duyarlıdır)str_rot13() Bir string üzerinde ROT13 şifrelemesini çalıştırırstr_shuffle() Stringi oluşturan tüm karakterleri rastgele karıştırırstr_split() Stringi diziye ayrıştırırstr_word_count() Stringde yer alan kelime sayısını hesaplarstrcasecmp() İki stringi karşılaştırır (büyük/küçük harf duyarlı
değildir)
Fonksiyonlar
284PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevistrchr() String içersinde string ararstrcmp() İki stringi karşılaştırır (büyük/küçük harf duyarlıdır)strcoll() Yerel temelli string karşılaştırmasıstrcspn() Belirli bir string parçasından önce yer alan karakterlerin
sayısını verirstrip_tags() String içersinden HTML ve PHP etiketlerini silerstripcslashes() addcslashes() fonksiyonu ile eklenen \ işaretlerini silerstripslashes() addslashes() fonksiyonu ile eklenen \ işaretlerini silerstripos() Bir string içersinde başka bir stringin ilk bulunuş
konumunu verir (büyük/küçük harf duyarlı değildir)stristr() Bir string içersinde başka bir stringin ilk bulunuşunu
verir (büyük/küçük harf duyarlı değildir)
Fonksiyonlar
285PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevistrlen() Stringin uzunluğunu gönderirstrnatcasecmp() İki stringi “doğal sıralama" algoritmasını kullanarak
karşılaştırır (büyük/küçük harf duyarlı değildir)strnatcmp() İki stringi “doğal sıralama" algoritmasını kullanarak
karşılaştırır (büyük/küçük harf duyarlıdır)strncasecmp() İlk n karakterin string karşılaştırması (büyük/küçük
harf duyarlı değildir)strncmp() İlk n karakterin string karşılaştırması (büyük/küçük
harf duyarlıdır)strpbrk() Bir string içersinde herhangi bir karakter setini arar. strpos() Bir string içersinde başka bir stringin ilk bulunuş
konumunu verir büyük/küçük harf duyarlıdır)
Fonksiyonlar
286PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevistrrchr() Bir stringin başka bir string içersindeki son bulunuşunu
verirstrrev() Stringi tersine çevirirstrripos() Bir string içersinde başka bir stringin en son
bulunuşunun konumunu verir (büyük/küçük harfduyarlı değildir)
strrpos() Bir string içersinde başka bir stringin en son bulunuşunun konumunu verir (büyük/küçük harfduyarlıdır)
strspn() Bir string içersinde belirlenen bir karakter listesinde yer alan karakterlerin sayısını verir
Fonksiyonlar
287PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevistrstr() Bir string içersinde başka bir stringin ilk bulunuşunun
konumunu verir (büyük/küçük harf duyarlıdır)strtok() Bir stringi daha küçük parçalara bölerstrtolower() Stringi küçük harflere dönüştürürstrtoupper() Stringi büyük harflere dönüştürürstrtr() String içersinde belirlenen karakterleri dönüştürürsubstr() Stringin istenen parçasını verirsubstr_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önderirsubstr_replace() Bir stringin belirli bir parçasını başka bir string ile
değiştirir
Fonksiyonlar
288PHP Programlama - 2. Bölüm Tolga GÜYER
String Fonksiyonları
Fonksiyon İşlevitrim() Stringin her iki tarafındaki boşlukları keserucfirst() Stringin ilk karakterini büyük harfe dönüştürürucwords() Stringi oluşturan her kelimenin ilk karakterini büyük
harfe dönüştürürvfprintf() Formatlı stringin belirtilen yöne çıktısını gönderirvprintf() Formatlı stringin çıktısını gönderirvsprintf() Formatlı stringi değişkene yazarwordwrap() Stringi belirli bir uzunluğa ulaştığında yeni satırlara
böler
Fonksiyonlar
289PHP Programlama - 2. Bölüm Tolga GÜYER
Ş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.
Fonksiyonlar
290PHP Programlama - 2. Bölüm Tolga GÜYER
Uygulamamız e-posta adresini şu kurala göre oluştursun:
<Adın ilk harfi>.<Soyad>@<e-posta uzantısı>
Fonksiyonlar
291PHP Programlama - 2. Bölüm Tolga GÜYER
Ö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.tre-posta adresi oluşturulsun.
Fonksiyonlar
292PHP Programlama - 2. Bölüm Tolga GÜYER
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.
Fonksiyonlar
293PHP Programlama - 2. Bölüm Tolga GÜYER
<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>
Fonksiyonlar
294PHP Programlama - 2. Bölüm Tolga GÜYER
<?php
function turkceharf_donustur ($harf){
switch ($harf) {case "ç":
$harf="c";break;
case "ğ":$harf="g";break;
case "ö":$harf="o";break;
Devamı
Fonksiyonlar
295PHP Programlama - 2. Bölüm Tolga GÜYER
case "ş":$harf="s";break;
case "ü":$harf="u";break;
case "İ":$harf="i";break;
case "ı":$harf="i";break;
}return $harf;}
Devamı
Fonksiyonlar
296PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
Fonksiyonlar
297PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
Fonksiyonlar
298PHP Programlama - 2. Bölüm Tolga GÜYER
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.
Fonksiyonlar
299PHP Programlama - 2. Bölüm Tolga GÜYER
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.
Fonksiyonlar
300PHP Programlama - 2. Bölüm Tolga GÜYER
<?phpfunction 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_harfler,$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; }?>
Fonksiyonlar
301PHP Programlama - 2. Bölüm Tolga GÜYER
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!";elseprint "Teşekkürler...";
?>
Fonksiyonlar
302PHP Programlama - 2. Bölüm Tolga GÜYER
Kullanıcı tarafından girilen bir metni Morsealfabesine 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' =>
Fonksiyonlar
303PHP Programlama - 2. Bölüm Tolga GÜYER
'--', 'N' => '-.', 'O' => '---', 'P' => '.--.', 'Q' => '--.-', 'R' => '.-.', 'S' => '...', 'T' => '-', 'U' => '..-', 'V' => '...-', 'W' => '.--', 'X' => '-..-', 'Y' => '-.--', 'Z' => '--..', '0' => '-----', '1' => '.----', '2' => '..---', '3' => '...--', '4' => '....-', '5' => '.....', '6' => '-....', '7' => '--...', '8' => '---..', '9' => '----.', '.' => '.-.-.-', ',' => '--..--', ':' => '---...', '?' => '..--..', '-' => '-....-', '/' => '-..-.', '(' => '-.--.-', ' ' => '(bosluk)');
Devamı
Fonksiyonlar
304PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
Fonksiyonlar
305PHP Programlama - 2. Bölüm Tolga GÜYER
Bu örnekte dikkat etmemiz gereken önemli bir nokta,
($metin[$i])kullanımdır. Burada $metin bir stringdeğişkenidir ancak $i indisi ile bir dizi gibi kullanılmıştır.
Fonksiyonlar
306PHP Programlama - 2. Bölüm Tolga GÜYER
Buradan çıkaracağımız sonuç, stringtü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.
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
307PHP Programlama - 2. Bölüm Tolga GÜYER
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.
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
308PHP Programlama - 2. Bölüm Tolga GÜYER
<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>
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
309PHP Programlama - 2. Bölüm Tolga GÜYER
<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ı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
310PHP Programlama - 2. Bölüm Tolga GÜYER
<tr bgcolor=#FFFFAA><td>İş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ı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
311PHP Programlama - 2. Bölüm Tolga GÜYER
<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>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
312PHP Programlama - 2. Bölüm Tolga GÜYER
<tr bgcolor=#BEE9E9><td colspan=3 align=left><input type=submit
value="Siparişi Al"></td></tr></table></form>
</body></html>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
313PHP Programlama - 2. Bölüm Tolga GÜYER
Form çalıştırıldığında devreye siparisi_al.phpdosyası 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.
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
314PHP Programlama - 2. Bölüm Tolga GÜYER
<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>
siparisi_al.php
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
315PHP Programlama - 2. Bölüm Tolga GÜYER
<?php
function birler_oku ($Gelen_Sayi){switch ($Gelen_Sayi) {case 0:
$bir="";break;
case 1:$bir="BİR";break;
case 2:$bir="İKİ";break;
case 3:$bir="ÜÇ";break;
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
316PHP Programlama - 2. Bölüm Tolga GÜYER
case 4: $bir="DÖRT";break;
case 5: $bir="BEŞ";break;
case 6: $bir="ALTI";break;
case 7: $bir="YEDİ";break;
case 8: $bir="SEKİZ";break;
case 9: $bir="DOKUZ";break;
}return $bir;}
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
317PHP Programlama - 2. Bölüm Tolga GÜYER
function onlar_oku ($Gelen_Sayi){switch ($Gelen_Sayi) {case 0: $on="";
break;case 1: $on="ON";
break;case 2: $on="YİRMİ";
break;case 3: $on="OTUZ";
break;case 4: $on="KIRK";
break;case 5: $on="ELLİ";
break;
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
318PHP Programlama - 2. Bölüm Tolga GÜYER
case 6: $on="ALTMIŞ";break;
case 7: $on="YETMİŞ";break;
case 8: $on="SEKSEN";break;
case 9: $on="DOKSAN";break;}
return $on;}
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
319PHP Programlama - 2. Bölüm Tolga GÜYER
function oku ($sayi){$basamak_sayisi=strlen($sayi);
switch ($basamak_sayisi) {case 1:
$sonuc=birler_oku((int)$sayi);break;case 2:
$sonuc=onlar_oku((int)$sayi[0]).birler_oku((int)$sayi[1]);
break;case 3:
if ($sayi[0]=="1") {
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
320PHP Programlama - 2. Bölüm Tolga GÜYER
$sonuc="YÜZ".onlar_oku((int)$sayi[1]).birler_oku((int)$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")
{
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
321PHP Programlama - 2. Bölüm Tolga GÜYER
$sonuc="BİN".birler_oku((int)$sayi[3]);}elseif ($sayi[1]=="0") {
$sonuc="BİN".onlar_oku((int)$sayi[2]).birler_oku((int)$sayi[3]); }
else {if ($sayi[1]=="1"){
$sonuc="BİNYÜZ".onlar_oku((int)$sayi[2]).birler_oku((int)$sayi[3])}
else{
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
322PHP Programlama - 2. Bölüm Tolga GÜYER
$sonuc="BİN".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])."BİN".birler_oku((int)$sayi[3]);
}elseif ($sayi[1]=="0") {
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
323PHP Programlama - 2. Bölüm Tolga GÜYER
$sonuc=birler_oku((int)$sayi[0])."BİN".onlar_oku((int)$sayi[2]).birler_oku((int)$sayi[3]); }
else{if ($sayi[1]=="1"){
$sonuc=birler_oku((int)$sayi[0])."BİNYÜZ".onlar_oku((int)$sayi[2]).birler_oku((int)$sayi[3]);
}else {
$sonuc=birler_oku((int)$sayi[0])."BİN".birler_oku((int)$sayi[1])."YÜZ".onlar_oku((int)$sayi[2]).birler_oku((int)$sayi[3]);}
}}
break; }return $sonuc;}
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
324PHP Programlama - 2. Bölüm Tolga GÜYER
function TL_Oku ($para){
$noktayeri=strpos($para,".");if ($noktayeri<>0) {
$tl=substr($para,0,$noktayeri);
$kr=substr($para,$noktayeri+1,strlen($para)-$noktayeri);
return oku($tl)." TL ".oku($kr)." Kr";
}else {
return oku($para)." TL";}}
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
325PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
326PHP Programlama - 2. Bölüm Tolga GÜYER
$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);
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
327PHP Programlama - 2. Bölüm Tolga GÜYER
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ı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
328PHP Programlama - 2. Bölüm Tolga GÜYER
<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ı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
329PHP Programlama - 2. Bölüm Tolga GÜYER
<td align=right> <?php echo number_format($kasa * kasa_ucreti,2)." TL" ?></td>
<td align=right> <?php echonumber_format($kasa * kasa_ucreti * $kdv_orani,2)." TL" ?></td>
<td align=right> <?php echonumber_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 echonumber_format(anakart_ucreti,2)." TL" ?></td><td align=right> <?php echo
number_format($anakart * anakart_ucreti,2)." TL" ?></td>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
330PHP Programlama - 2. Bölüm Tolga GÜYER
<td align=right> <?php echo number_format($anakart* anakart_ucreti * kdv_orani,2)." TL" ?></td>
<td align=right> <?php echonumber_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 echonumber_format($islemci * islemci_ucreti * kdv_orani,2)." TL" ?></td>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
331PHP Programlama - 2. Bölüm Tolga GÜYER
<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 echonumber_format($sabitdisk * sabitdisk_ucreti * kdv_orani,2)." TL" ?></td>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
332PHP Programlama - 2. Bölüm Tolga GÜYER
<td align=right> <?php echonumber_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 echonumber_format($cddvd * cddvd_ucreti * kdv_orani,2)." TL" ?></td>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
333PHP Programlama - 2. Bölüm Tolga GÜYER
<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 echonumber_format($bellek * bellek_ucreti * kdv_orani,2)." TL" ?></td>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
334PHP Programlama - 2. Bölüm Tolga GÜYER
<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>
Devamı
Öğrendiklerimizi Uygulayalım: Bilgisayar Parçaları Siparişi
335PHP Programlama - 2. Bölüm Tolga GÜYER
<td align=right> <?php echonumber_format($toplam_tutar * (1 + kdv_orani),2)." TL" ?></td></tr></table>
<?phpecho "<p>YAZI İLE : "; echo
TL_Oku((string)(number_format($toplam_tutar * (1 + kdv_orani),2)));echo "<p>TEŞEKKÜRLER...";
?></body></html>
Devamı
top related