eğlence 12 Mart 2010 Cuma 04:56    
Açılış Sayfan Yap Sık Kullanılanlara Ekle   Yardım
    Bu Sitede Neler Var   
  Sohbet
  Videolar
  Grup Resimler
  Fıkralar
  Şarkı Sözleri
  Flash Animasyonlar
  Flash Oyunlar
  Magazin Haberleri
  Faydalı Bilgiler
  Programlar
  Anne Sayfa
Anket
Ordu`nun dereleri yukarı akarsa ne olur?

Hiçbişey olmaz
Newton Göt Olur
Sular kesilir
Dere yukarı akarmı lan
Aşk herşeyin üstündedir
Bok ettiniz türküyü
Yorum Yok
Böyle anketmi olur lan
Olur mın akoyim nolcek


[Sonuçları Görelim]

Link Değişimi
Cinsellik
Sizin Siteniz
Ana Sayfa » Her Türlü Bilgi » Bilgisayar » Zekice Kod Yazmak - BOLUM 3
Son Eklenenler Çok İzlenenler Çok Yorumlananlar
Zekice Kod Yazmak - BOLUM 3

Degiskenlerin Fonksiyonlarla Kullanilmasi

Bu konumuz icerisinde sizlere fonksiyonlarin icinde kullandigimiz degiskenlerin fonksiyonun disinda
bize gerekli olup olmadigini belirlememizi saglayacak bazi kurallar gosterecegiz.Bu olaya
programcilik literarunde "degiskenin omru" adi verilir.

Bir degisken yaratildigi anda hafizada kucuk bir parca o degiske`nin kullanimi icin ayrilir.Bizler
fonksiyonun icinde kullandigimiz degiskenlerin fonksiyon isini bitiridikten sonra yasamalarini
istemeyiz.Bu nedenle PHP,fonksiyon calismasini bitirdikten sonra fonksiyonun icindeki degiskenleri
"kapatip" omurlerinin "bitmesini" saglar.Fonksiyonun icinde yer alan degiskenler fonksiyon
calismasini bittirdikten sonra "oldurulur" "yok edilir".

Fonksiyonun disindan o degiskene yapilacak refeanslar artik "illegal" "invalid" yani
"gecersiz"olarak kabul edilir ve hata ile sonuclanir.

Cunku artik o degisken hicbir "degeri" saklamiyordur.

Global ve Yerel Degiskenler

Fonksiyo`nun disinda yaratilan butun degiskenlerin omru "web sayafasinin gosterim suresi" omru ile
aynidir.Istemci - Server arasindaki bu iliskide degiskenler sahip olduklri degerleri koruyacaktir.

Degiskenlerle ilgili bu konsepte "scope" adi verilir.Fonksiyonun icinde tanimlanan butun
degiskenler bu anlamda "local scope" adini alir.

Omurleri o sayfa ile ilgili butun islemler boyunca sona ermeyen diger degiskenlere ise "global
scope" adi verilir.

Bir ornek verelim ve konuyu daha iyi anlayalim,

<?php $HosgeldinMesaji = "Merhaba Dostum"; <--------------Global Degisken

function Karsilama_Mesajini_Cevir ($HosgeldinMesaji) {
$HosgeldinMesaji = "Hello my Buddy"; <--------------Local Degisken return $HosgeldinMesaji; }

Karsilama_Mesajini_Cevir (); echo $HosgeldinMesaji; ?>

Ilk satirda degiskenimiz global olarak tanimlanip ona "Merhaba Dostum" degeri veriliyor.Bu kisimda
anlasilmayacak bir sey yok.Biz fonksiyon icinde yine bu $HosgeldinMesaji degiskenine "Hello my
Buddy" degerini atadik.Sonrada fonksiyonu calismasi icin cagirdik.Unutmayin burada (yani
fonksiyonun icinde) $HosgeldinMesaji bir "local degiskendir".Eger bu programi calistirirsaniz,

"Merhaba Dostum" mesajini alirsiniz.Sebebini aciklayalim,

Cunku fonksiyonun icinde yer alan degisken ile bizim programimizin basinda tanimladigimiz
degiskenin efekti tamamen farkli olacaktir.Degiken fonksyion icinde localdir.

Bir onemli uyari : Biz fonksiyon`un icinde yanlizca degeri "return" kullanarak dondurduk.Eger
fonksiyon icinde "echo" kullansaydik sonuc gene degismeyecek ve sonucta ekranda "Merhaba Dostum"
yazisi goruntulenecekti.Cunku "$HosgeldinMesaji" degiskeni global olarak tanimlidir.
Simdi bu sekilde kullanalim ve sonuca bakalim.Hatta bu sefer degisken ismini de degistirelim.

<?php $HosgeldinMesaji = "Merhaba Dostum";

function Karsilama_Mesajini_Cevir ($IngilizceMesaj) {
$IngilizceMesaj = "Hello my Buddy"; return $IngilizceMesaj; }

Karsilama_Mesajini_Cevir (); echo $HosgeldinMesaji; echo $IngilizceMesaj;

?>

$IngilizceMesaj degiskeni hic bir deger saklamamaktadir.Bu kisim cok onemlidir ve program yazmanin
en temel taslarindan bir tanesidir.

Fonksiyonda "return" kullanarak degikenin degerini dondurdugunuz anda degiskenin "yasama omru"
otomatik olarak sona erdirilir .Fonksiyonun icinde dondurulen deger fonksiyonun disinda hic bir
deger saklamayacaktir.Kisaca fonksyionun icinde yasayan degisken fonksiyonun disinda tam bir oludur
ve ici bostur.

Global Degiskenleri Fonksiyonun Icinde Kullanmak

Yukaridaki aciklamanin birde tersini dusunelim.Biz $HosgeldinMesaji degiskenini fonksiyon icinde
"echo" ile gostermek isteseydik sonuc ne olacakti?

<?php $HosgeldinMesaji = "Merhaba Dostum";

function Karsilama_Mesajini_Cevir ($IngilizceMesaj) {
echo $HosgeldinMesaji; $IngilizceMesaj = "Hello my Buddy"; return $IngilizceMesaj; }

Karsilama_Mesajini_Cevir (); echo $HosgeldinMesaji; echo $IngilizceMesaj; ?>

Bu hicbirseyi degisitrmeyecek ve ilk kuralimizda oldugu gibi tersine olarakta $HosgeldinMesaji
degiskeni fonksyionun icinde hic bir sey ifade etmeyecektir.Fonksiyonun icinde bu degiskenin degeri
yoktur.Bostur.Cunku fonksiyon icinde bu degisken tanimlanmamsitir.

Fonksiyonun disindaki bir degiskeni fonksiyon icinde kullanmak istersek bunun icin iki yol
bulunmaktadir.

Birinci Yol asagida gosterilmistir.

<?php $HosgeldinMesaji = "Merhaba Dostum";

function Karsilama_Mesajini_Cevir ($IngilizceMesaj) {
global $HosgeldinMesaji; echo $HosgeldinMesaji; $IngilizceMesaj = "Hello my Buddy"; return; }

Karsilama_Mesajini_Cevir (); echo $HosgeldinMesaji; ?>

yukaridaki kucuk programda $HosgeldinMesaji degiskenini global olarak tanimladik.Daha onceden
belirttigimiz gibi eger degiskeni "global" olarak tanimlamadan fonksiyon icinde kullandigimizda hic
bir sey ifade etmiyordu.PHP sanki onu hic yazilmamis,tanimlanmamis gibi degerlendirecktir.

Simdi yukarida degiskenimizi "global" olarak tanimladik.Artik programin ciktisi beklenen sekilde
"Merhaba Dostum" olacaktir.

Ikinci Yol : PHP bu sekilde global tanimlanan degiskenleri $GLOBALS dizisinde saklamaktadir.

Eger dizi icerisinde saklanan global degiskenlerin degerini ekrana yazmak istersek,

<?php $HosgeldinMesaji = "Merhaba Dostum";

function Karsilama_Mesajini_Cevir ($IngilizceMesaj) {
echo $GLOBALS["HosgeldinMesaji"]; <------------------Birinci "Merhaba Dostum" echo
$HosgeldinMesaji; $IngilizceMesaj = "Hello my Buddy"; return $IngilizceMesaj; }

Karsilama_Mesajini_Cevir (); echo $HosgeldinMesaji; <------------------Ikinci "Merhaba Dostum"
echo $IngilizceMesaj; <--------------------Hic bir sey ifade etmiyor.

?>
Yukaridaki son iki ornekte de ekranda iki tane alt alta "Merhaba Dostum" yazisinin ciktigini
gorursunuz.Bu yazilardan birincisi fonksiyonun icinde tanimlanan digeride fonksiyonun disinda
tanimlanan kod parcasinin ciktilaridir.

Tabii ki $IngilizceMesaj degiskeni hic bir deger gostermeyecektir.Cunku degiskeni fonksiyonun
disinda yanlizca "echo" ettik.($IngilizceMesaj degiskeni yanlizca fonksiyonun icinde yasayan
disariya cikinca olen bir varlik gibidir.Ama "global" olarak tanimladigimiz $HosgeldinMesaji hem
fonksiyon icinde hem fonksiyon disinda yasayabilmektedir)

"global" komutunu kullanmak biraz daha kolay geliyor insanlara.Oysaki $GLOBALS dizisini kullanmakta
goruldugu kadar zor degildir.

Degisken ismini "" tirnak isaretlerinin arasina "$" dolar ifadesi olmadan [] koseli parentezlerin
icinde yazmaniz yeterlidir.

$GLOBALS ["DegiskenIsmi"];

Bu dizinin kullanimi bir onceki konularda bahsettigimiz "string diziler" konusu ile aynidir.Her
turlu dizi islemini "diziler" makalesinde belirttigimiz sekilde yapabilirsiniz.
Eger bir fonksiynu devamli olarak cagiracaksaniz ve fonksiyonun dondurdugu degiskenin degerini
hatirlamasini istiyorsaniz ne yapacaksiniz?

Hatilayacaginiz gibi bir fonksioyonun dondurdugu degisken degeri fonksiyon disina "return" ile
cikildiginda "olduruluyordu".Bazi durumlar icin bunu istemiyor olabiliriz.

function web_sayfasi_hit_sayaci () {
return $Kisi_Sayisi = $Kisi_Sayisi + 1; }

Fonksiyonun her cagrilimasinda degismeyen degiskenlere "static degiskenler" denilir.Siz yanlizca
fonksyionun arka arkaya cagrilma islemleri sirasinda degiskenin tanimli olmasina dikkat
etmelisiniz.

function web_sayfasi_hit_sayaci () {
static $Kisi_Sayisi = 0; return $Kisi_Sayisi = $Kisi_Sayisi + 1; }

Burada bir seyi aciklamak durumundayiz.Gordugunuz gibi ilk satirda "static" komutu ile beraberce
$Kisi_Sayisi degiskenine "0" degerini atadim.Fonksiyon ilk cagrildiginda bu "static" komutu
degerlendirilecek ve degiskenin degerini israrla saklamak istedigimizi ve PHP`nin onu yok
etmemesini sagladik.Bu "static" komutu fonksyion ilk calistiginda kullanilacak fakat daha sonraki
fonksiyon cagirmlarinda goz ardi edilecektir.

Eger yukaridaki fonksiyonun ciktisini "echo" etseydik,

echo ( web_sayfasi_hit_sayaci () ); <---1 degerini dondurur.

echo ( web_sayfasi_hit_sayaci () ); <---2 degerini dondurur.

echo ( web_sayfasi_hit_sayaci () ); <---3 degerini dondurur.
Simdiye kadar global,local,ve static degiskenleri inceledik.

Global degiskenler degerlerini tum programin calismasi boyunca korurular.Eger fonksyionlarin icinde
kullanmka isterseniz GLOBALS komutlarini kullanmalisiniz.

Local degiskenler yanlizca fonksiyonun icinde tanimlidir ve fonksiyonun cagrilmasi sureci boyunca
yasarlar.Fonksiyon gorevini bitirince otomatik olarak yok edilirler.

Static degiskenler degerlerini fonksiyon icinde israrli bir sekilde saklarlar.Fonksiyon her
cagrildiginda bu degerler degismez.
Simdi bir uygulama yapalim.

1.Text editorunuzu acin ve asagidakileri yazin.

<HTML> <HEAD></HEAD> <BODY> <BR> <BR> <FONT SIZE= -1>

<?php $GlobalDegisken = "Global";

function local () {
$LocalDegisken = "Local"; static $StatikDegisken = 0; echo "<BR>Global degiskenin degeri".
$GLOBALS["GlobalDegisken"]; echo "<BR>Local degiskenin degeri $LocalDegisken "; echo
"<BR>Statik degiskenin degeri $StatikDegisken "; return $StatikDegisken = $StatikDegisken +
1; }

echo "Fonksiyonu ilk defa cagirdik..."; local ();

echo "<BR><BR>Fonksiyonun disina cikiyoruz degerlere bakin"; echo "<BR> Global
degiskenin degeri $GlobalDegisken"; echo "<BR> Local degiskenin degeri $LocalDegisken"; echo
"<BR> Statik degiskenin degeri $StatikDegisken";

echo "<BR><BR>Fonksiyonu ikinci defa cagirdik..."; local ();

echo "<BR><BR>Fonksiyonun disina cikiyoruz degerlere bakin"; echo "<BR> Global
degiskenin degeri $GlobalDegisken"; echo "<BR> Local degiskenin degeri $LocalDegisken"; echo
"<BR> Statik degiskenin degeri $StatikDegisken";

echo "<BR><BR>Fonksiyonu ucuncu defa cagirdik..."; local ();

echo "<BR><BR>Fonksiyonun disina cikiyoruz degerlere bakin"; echo "<BR> Global
degiskenin degeri $GlobalDegisken"; echo "<BR> Local degiskenin degeri $LocalDegisken"; echo
"<BR> Statik degiskenin degeri $StatikDegisken";

?> </FONT> </BODY> </HTML>

2.Bu dosyayi "cimbom.php" olarak kayit edin. :))

3."cimbom.php" acin ve sonuclara goz gezdirin.

Ornek Dosyalar

http://www.turk-php.com/ornekler/cimbom.php
Program nasil calisiyor?

Ilk satirda her zamanki gibi bir degisken yaratip ona deger atadik.(Degiskenimizi herhangi bir
fonksiyon icinde yaratmadik o yuzden degiskenimiz global bir degisken)

$GlobalDegisken = "Global";

Fonksiyonun icinde her zamanki gibi bir degisken yaratip deger atadik.(Dogal olarak fonksiyon
icinde yaratilan her degisken local degisken olacaktir.)

$LocalDegisken = "Local";

Fonksiyonun icinde bir "statik" degisken yarattik ve deger atadik.(fonksiyon icinde yarattigimiz bu
degiskenin degeri fonksiyon disina cikildiginda,eger fonksiyonu ikinci kez ucuncu kez
calistirrisaniz hatirlanacaktir)

static $StatikDegisken = 0;

programmimiz local () satiri ile calismaya basliyor.

Her defasinda fonksiyon cagrildiginda degerleri ekrana yaziyor.

Her turlu gorus ve dusuncenizi lutfen bu sayfanin altinda yer alan kisima yazmayi unutmayiniz.Ancak
bu sekilde bizler yaptigimizin odulunu almis olacagiz.

Saygilar, Serkan Hadi Ceylani serkan@turk-php.com
Program: http://www.turk-php.com/ornekler/cimbom.php
Ekleme: 12.12.2007 Okuma: 743  
Kategori: Bilgisayar Yorum: 0
Tags: Zekice Kod Yazmak - BOLUM 3 Bilgisayar
İsminiz
E-Mailiniz
Yorumunuz
SEÇMECE BİLGİLER
  Şeker gibi klavyeler
  Windows Explorer Güvenlik A
  PHP Kodlama Standardlari (U
  3 Gb Mail
  Banner Killer (Free Hostlar
  Nick Şekillendirici Bide B
  XP Anahtar Kodlarının Kısay
  Bir Çok Programin Cd Şifrel
  Ping Kodları
  Webcamda GÖrÜntÜnÜzÜn ÜstÜn
KATEGORİLER
  Aşk ve Sevgi
  Bilgisayar
  Cep Telefonları
  Cinsellik
  Çiçek ve Bitkiler
  Erkeklere Özel
  Hayvanlar
  İnternetin İçinden
  Kadınlara Özel
  Komik ve Eğlence
  Sağlık
Bize Ulaşın | Ana Sayfa