logo
Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
kodcu  
#1 Gönderildi : 13 Aralık 2016 Salı 09:13:13(UTC)
kodcu

Sıralama: Advanced Member

Gruplar: Registered
Katılan: 12.12.2016(UTC)
Mesajlar: 37
Turkey

Fonksiyona varsayılan değer verebiliriz
Buradaki örneklerde tanımladığımız fonksiyonlara bekledikleri değerleri, onları
göreve çağırdığımız noktada biz veriyoruz. Ancak öyle durumlar olabilir ki, fonksiyonun
beklediği değerlerden biri veya bir kaçı, göreve çağıran satır tarafından verilmeyebilir;
fonksiyon varsayılan bir değerle çalıştırılabilir. Şu örneği yazdir02.php adıyla kaydedin:

Kod:

<HTML> 
 <HEAD> 
 <TITLE>PHP'de Fonksiyon</TITLE> 
 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> 
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> 
 </HEAD> 
 <BODY> 
   <?php 
     function yazdir ($metin, $boyut=3) {  
       print ("<font size=\"$boyut\">$metin</font><br>");  
      } // Başka kodlar buraya girebilir 
      yazdir("Bu Başlık", 5 ); 
      yazdir("Bu küçük boyutta bir metin", 2); 
      yazdir("Bu varsayılan boyutta bir metin"); 
      yazdir("Bu çok büyük Başlık", 8); 
      yazdir("Bu uzun bir paragraf metni. Boyutu varsayılan ölçüde. Bu uzun bir paragraf metni. Boyutu varsayılan ölçüde. Bu uzun bir paragraf metni. Boyutu varsayılan ölçüde."); 
?> </BODY> </HTML>


Bu örnekte, daha öncekilerden farklı olarak fonksiyonun, beklediği iki argümandan
birisini, fonksiyonu tanımlarken verdiğimize dikkat edin: " function yazdir ($metin,
$boyut=3)" ifadesi, PHP'ye, "Bu fonksiyona ikinci argüman eksik gönderilirse, telaşa
kapılma, onun yerine 3 rakamını kullan!" anlamına gelir. Nitekim, programın daha ilerdeki
bölümlerinde bu fonksiyon görevlendirilirken birinci argümanın değeri olan metin verildiği
halde, iki ayrı yerde ikinci argümanın değeri verilmiyor. Bu iki durumda., PHP, yazdir()
fonksiyonunda varsayılan değer olan 3'ü kullanıyor.
Bunu, görüntülenen sayfanın kaynağında rahatça görebiliriz:

Kod:

<HTML> 
 <HEAD> 
  <TITLE>PHP'de Fonksiyon</TITLE> 
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> 
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> 
  </HEAD> 
<BODY>  
 <font size="5">Bu Başlık</font><br> 
 <font size="2">Bu küçük boyutta bir metin</font><br> 
 <font size="3">Bu varsayılan boyutta bir metin</font><br> 
 <font size="8">Bu çok büyük Başlık</font><br> 
 <font size="3">Bu uzun bir paragraf metni. Boyutu varsayılan ölçüde. Bu uzun bir paragraf metni. Boyutu varsayılan ölçüde. Bu uzun bir paragraf metni. Boyutu varsayılan ölçüde. </font><br> 
</BODY> 
</HTML> 


Programda, yazdir() fonksiyonunun ikinci ve dördüncü kullanımında ikinci
argümanın bulunmadığına, yukarıdaki HTML'de bu satırlar için font size="3" etiketinin
kullanıldığına dikkat edin.

Değişkenlerin kapsamı: global ve static
Yukarıda hesapla.php örneğini birlikte yaptıysak, bir nokta dikkatinizi çekmiş
olmalı: dört fonksiyonda da aynı değişken adlarını kullanıyoruz ve sonucu aynı isimle
print() fonksiyonuna gönderiyoruz. PHP nasıl oluyor da, aynı isimli değişkenleri buradaki
gibi ayrı ayrı değerlerle ele alabiliyor? Bu sorunun cevabını verebilmek için değişkenlerin
kapsam alanına bakmamız ve ve bu arada global deyimi ile tanışmamız gerekir.
Bir fonksiyonun değişkenleri, sadece o fonksiyonun ömrü süresince vardır; hiç bir
fonksiyon diğer bir fonksiyonun değişkenlerinin veya kendisine verilmemiş bir başka
değişkenin değerini bilemez; kullanamaz. Bunu hemen bir örnekle görelim. Şu kodu
kapsam01.php adıyla kaydedin:

Kod:

<HTML> 
 <HEAD> 
 <TITLE>PHP'de Fonksiyon</TITLE> 
 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> 
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> 
 </HEAD> 
 <BODY> 
  <?php 
    $metin = "Başkalarına yararlı olmanın sınırı yoktur!"; 
    function yazdir () {  
     print ("<h1>İşte metin: $metin </h1>");  
    } // Başka kodlar buraya girebilir  
    yazdir(); 
 ?> 
 </BODY> 
</HTML>



Normal görünüşlü bir fonksiyon ve kendisinden önce tanımlanmış olan $metin adlı
değişkenin tuttuğu değeri, kendisi göreve çağrıldığı anda Browser penceresinde
görüntülemeye hazır görünüyor! Fonksiyonun dışarıdan argüman istemediğini, kullanacağı
print() komutunun konusu olarak $metin değişkeninin değerini kullanacağını da
anlıyabiliyoruz. Fakat bu programı çalıştırdığımızda karşımıza çıkan manzara çok farklı
oluyor.
Fonksiyonun çalıştığını, yazdırması beklenen şeylerin ilk bölümünü yazdırmış
olmasından anlayabiliriz. Fakat, $metin değişkeninin değeri nerede? Şimdi bu sorunun
cevabını biliyoruz: $metin değişkeni fonksiyonun kapsama alanı (scope) dışında! Bir
fonksiyon kendisine verilmeyen veya kendi içinde tanımlanmayan bir değişkeni
kullanamaz; bilemez, değerinden haberi olmaz. Nitekim bu görüntüyü aldığınız sırada
kaynak kodlarına bakarsanız, "<h1>..</h1>" etiketlerinin arasında sadece "İşte metin:"
kelimelerinin bulunduğunu göreceksiniz.
Bir fonksiyonun dışında tanımladığımız değişkenlerimizi fonksiyona tanıtabilmek için
global deyimini kullanırız; böylece değişken bütün program boyuinca küresel nitelik
kazanmış olur:
Aynı kodun fonksiyon bölümünü şöyle değiştirerek, kapsam02.php adıyla kaydedin:

Kod:

function yazdir () {  global $metin;  print ("<h1>İşte metin: $metin </h1>");  } 


Programımızı çalıştırdığımızda, bu kez metnin arzu ettiğimiz gibi görüntülendiğini
göreceğiz.
Bu noktada dikkat etmemiz gereken şey, global deyimi ile kendisine kullanılmak
üzere verilen değişken, artık bir bakıma fonksiyonun malı olur ve fonksiyon tarafından
değeri değiştirilebilir. Bütün program boyunca kullanmaya niyetli olduğunuz global
değişkenlerin, kullanımına verildiği fonksiyon tarafından değiştirilip-değiştirilmediğine
dikkat edin.
Bir değişkenin bütün programda gerekli olmadığı ve sadece bir fonksiyon içinde
kullanılacağı durumlarda bu değişkeni fonksiyonun içinde tanımlamak daha doğru olur.

Fakat daha önce belirttiğimiz gibi fonksiyonların içinde tanımlanan değişkenler fonksiyon
çalışırken var olur; fonksiyon sona erdiğinde de ölür. Başka bir deyişle, bir fonksiyonun
içinde oluşturduğumuz bir değişkenin fonksiyon sona erdiğinde sıfırlanmaması için bir çare
olması gerekir. Bu çarenin adı, static deyimidir. Şöyle bir örnek düşünelim: Sitemizdeki bir
hesaplama fonksiyonu ziyaretçilerimizin yeni alışverişlerinin toplamını eski toplama
ekleyerek, yeni ana toplamı buluyor ve ziyaretçi alışveriş sepetine yeni bir mal ekledikçe,
ve o andaki ana toplamın ne olduğunu öğrenmek istedikçe, fonksiyonumuzun eski ana
toplamı hatırlaması gerekiyor. Şu andaki PHP bilgimizle böyle bir program yazmaya
kalkmayalım; ama daha basit bir örnek olarak bu kodu static.php adıyla kaydedelim:

Kod:

<HTML> 
 <HEAD> 
  <TITLE>PHP'de Fonksiyon</TITLE> 
   <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> 
   <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
  </HEAD> 
<BODY> 
   <?php 
    function saydir () {  
      static $sayi = 0;  
      $sayi++;  
      print ("<h3>Fonksiyonun tuttuğu sayı: $sayi </h3>");  
    } // Başka kodlar buraya girebilir  
     print ("<h2>Fonksiyonun birinci kez çağrılması:</h2>");  
     saydir();  
     print ("<h2>Fonksiyonun ikinci kez çağrılması:</h2>");  
     saydir();  
     print ("<h2>Fonksiyonun üçüncü kez çağrılması:</h2>");  
     saydir();  
     print ("<h2>Fonksiyonun dördüncü kez çağrılması:</h2>");  
     saydir(); ?> 
 </BODY> 
</HTML> 


Bu programı, static deyimi olmadan çalıştıracak olursak, saydir() fonksiyonu her
çağrıldığında $sayı değişkeninin baştan tanımlandığını ve bir türlü 1'den ileri gidemediğini
göreceğiz. static ise fonksiyon bittikten sonra $sayi değişkeninin değerinin değişmeden
kalmasını sağlayacaktır.
Şimdi, bir PHP programının gerektirdiği hemen herşeyi görmüş olduk; sadece iki
özel araç, dizi değişkenler ve nesneler (Objects) kaldı. Bunları da gelecek bölümde ele
aldıktan sonra, PHP'yi gerçek ortamda, Web'de kullanmaya başlayabiliriz.


Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.