Linuxweb.Tr.GG Online PHP,MYSQL Kılavuzu - Değişkenlerin kapsamı: global ve static
   
Menü
  Ana Sayfa
  LinuxWeb Anket
  Bedava Linux Siteleri Evinize Teslim
  Linux Haberleri
  Linux Destek, Teknoloji ve Eğitim Kurumları
  Linux E-Book
  Linux Siteleri
  Windows'da Linux Temaları
  Temel Linux Komutları
  Temel Linux Komutları 2
  Linux Kitapları ve Dergileri
  Pardus Nedir ?
  Pardus İndir
  Pardus Değişenler
  Linux Dersleri 1
     
  PHP ve MYSQL
  PHP
  PHP'ye Giriş
  PHP ve Veritabanı
  PHP ve Web Sunucusu
  Unix/Linux Sistemleri
  Linux'ta program derlediniz mi?
  Güvenli socket ve Internet Erişimi Katmanı
  Windows-PWS ve IIS
  Browser Yetenek Dosyası: Browscap.ini
  PWS 4.0
  Windows'da Apache!
  Windows'da MySQL
  PHP Dili
  PHP'nin Yapı Taşları
  PHP programını durdurmak
  Değişkenler
  Veri Türleri
  Tür Değiştirme
  Fonksiyon
  Escape
  Dört yararlı fonksiyon
  İşlemciler (Operatörler)
  Bir Arttırmak veya Azaltmak için
  Sabit Değerler
  Tarih ve saat Verisi
  PHP'de Program Denetimi
  if Deyimi
  switch deyimi
  switch için kısa yol
  Döngüler
  while döngüsü
  do..while
  for döngüsü
  foreach
  Döngüyü sona erdirmek için: break
  Döngüyü sürdürmek için: continue
  Fonksiyonlar
  Fonksiyon Tanımlama ve Çağırma
  Fonksiyona varsayılan değer verebiliriz
  Değişkenlerin kapsamı: global ve static
  Dizi-Değişkenler, Nesneler
  Dizi Değişken Oluşturalım
  Dizi değişkenleri kullanalım
  Dizi Değişkenlerin Düzenlenmesi
  Dizileri birleştirme: array_merge()
  Dizilere değişken ekleme: array_push()
  Dizinin ilk elemanını silme: array_shift()
  Diziden kesit alma: array_slice()
  Dizileri sıralama: sort() ve rsort()
  İlişkili dizileri sıralama: asort() ve ksort()
  Nesneler
  Bir Nesne Oluşturalım
  PHP İşbaşında
  Formlar
  Form'dan GET Metoduyla Gelen Bilgiler
  URL Kodları
  Form'dan POST Metoduyla Gelen Bilgiler
  Form ile işlemciyi Birleştirelim
  Dosya "çıkartma"
  Dosya İşlemleri
  Harici Dosya (include)
  include mu, require mı?
  Dosyalar hakkında bilgi
  Dosya var mı? file_exits()
  Dosya mı, dizin mi? is_file() ve is_dir()
  Dosya okunabilir mi? is_readable()
  Dosya yazılabilir mi? is_writable()
  Dosya çalıştırılabilir mi? is_executable()
  Dosya boyutu: filesize()
  Dosyaya son erişim tarihi: fileadate(), filemtime() ve filectime()
  Dosyalar oluşturma ve silme
  Dosya açma
  Bir Fonksiyonu durdurmak için: Öl!
  Dosya okuma: fgets(), fread() ve fgetc()
  fseek() ile ölçü belirleme
  Dosyaya yazma ve ek yapma: fwrite() ve fputs()
  Kullanımdaki dosyayı kilitleyin!
  Dizinlerle İşlemler
  Dizin içeriğini listeleme: opendir() ve readdir()
  Dizin oluşturma: mkdir()
  Dizin silme: rmdir()
  Bir Dosya İşlemi Örneği: Konuk Defteri
  Metin Düzenleme ve Düzenli İfadeler
  Temel Alfanümerik Fonksiyonları
  substr()
  trim()
  ord()
  strlen()
  chr()
  printf() ve sprintf()
  number_format()
  Tarih ve Saat Düzenleme
  Düzenli İfadeler
  Eşleştirme deyimleri ve işaretler
  Düzenli İfadelerde Özel Karakterler
  Karakter Grupları
  Düzenli İfade Fonksiyonları
  ereg() ve eregi()
  ereg_replace() ve eregi_replace()
  split()
  sql_regcase()
  PHP ile Veritabanı
  MySQL Veritabanı
  mySQL veri türleri
  PHP-MySQL İlişkisi
  PHP'de Güvenlik
  Parola ve SSL
  Tırnak İşareti Sorunu
  PHP Kaynakları
       

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>

<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:

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>

<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
   
Bugün 95 ziyaretçi (114 klik) Tekil ziyaretci sitemizi ziyaret etti...
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol