Sehri-Paylasim
Hosgeldiniz
Sehri-Paylasim
Hosgeldiniz
Sehri-Paylasim
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Sehri-Paylasim


 
AnasayfaAramaLatest imagesKayıt OlGiriş yap
Giriş yap
Kullanıcı Adı:
Şifre:
Beni hatırla: 
:: Şifremi unuttum
En iyi yollayıcılar
Admin
Değişkenlerin kapsamı: global ve static Vote_lcapDeğişkenlerin kapsamı: global ve static Voting_barDeğişkenlerin kapsamı: global ve static Vote_rcap 
daba31
Değişkenlerin kapsamı: global ve static Vote_lcapDeğişkenlerin kapsamı: global ve static Voting_barDeğişkenlerin kapsamı: global ve static Vote_rcap 
hidelgo41
Değişkenlerin kapsamı: global ve static Vote_lcapDeğişkenlerin kapsamı: global ve static Voting_barDeğişkenlerin kapsamı: global ve static Vote_rcap 

 

 Değişkenlerin kapsamı: global ve static

Aşağa gitmek 
YazarMesaj
Admin
Kurucu / Root
Admin


Mesaj Sayısı : 552
Kayıt tarihi : 09/07/10
Yaş : 41
Nerden : Bursa

Değişkenlerin kapsamı: global ve static Empty
MesajKonu: Değişkenlerin kapsamı: global ve static   Değişkenlerin kapsamı: global ve static EmptyC.tesi Eyl. 24, 2011 8:05 am

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:
<HTML>
<HEAD>
<TITLE>PHP'de Fonksiyon</TITLE>
****** http-equiv="content-type" content="text/html; charset=ISO-8859-9">
****** 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:
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:
<HTML>
<HEAD>
<TITLE>PHP'de Fonksiyon</TITLE>
****** http-equiv="content-type" content="text/html; charset=ISO-8859-9">
****** 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.
Sayfa başına dön Aşağa gitmek
https://sehripaylasim.yetkin-forum.com
 
Değişkenlerin kapsamı: global ve static
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Sehri-Paylasim  :: Forum :: HTML, PHP, ASP, PERL-
Buraya geçin: