Diziler & Objeler


    × Bunları biliyor muydunuz?
"Dinamik bir kütüphaneyi tanımlarken sınıf isminin başına Internal ön eki getirirerek statik erişimli hale getirebilirsiniz. "


Diziler programlama dilleri için vazgeçilmez kullanımlardan biridir. Dizilerin en önemli özellikleri bir değişkende birden fazla değer saklayabilmeleridir. Bu yönleri ile ilerleyen bölümlerde anlatacağımız döngüler ile sık kullanılırlar. Objeler de diziler gibidir aralarındaki tek fark dizi içerisinde yer alan değerlere erişim yöntemleri farklıdır.

 

 

# Diziler Nasıl Tanımlanır?


PHP programlama dilinde dizi tanımlamalarının söz dizimi aşağıdaki gibidir.

Kural1: $diziAdi = ['değer1', 'değer2', ... 'değerN'];

Kural2: $diziAdi = ['anahtar1' => 'değer1', ... 'anahtarN' => 'değerN']

Aşağıda örnek dizi tanımlaması ve kullanımına örnek verelim.

$sehirler = ['istanbul', 'izmir', 'ankara', 'bursa'];

var_dump($sehirler);
[0]=> "istanbul" [1]=> "izmir" [2]=> "ankara" [3]=> "bursa" 

Yukarıda $sehirler isimli değişkene 4 elemanlı bir dizi tanımlaması yaptık.

Dizi Değerlerine Erişmek

Yukarıdaki tanımlamada yer alan $sehirler dizisinde yer alan değerlerden birine doğrudan erişmek isteyebilirsiniz. Dizi değerleri 0 dan başlayarak numaralandırılırlar.

echo $sehirler[0]; # istanbul
echo $sehirler[1]; # izmir
echo $sehirler[2]; # ankara
echo $sehirler[3]; # bursa

Olmayan bir dizi değerine ulaşmaya çalışırsanız aşağıdakine benzer bir hata alırsınız.

echo $sehirler[4];
Notice: Undefined offset: 4 in C:\xampp\htdocs\test.php on line 5
Diziye Anahtar Ekleme

Dikkat edilirse dizi içerisindeki değerlere o değerlerin bulunduğu sıra numarası ile eriştik. İstenirse bu numara yerine kendi belirleyeceğiniz anahtarlar da kullanmanız mümkündür.

$sehirler = [34 => 'istanbul', 35 => 'izmir'];

echo $sehirler[35]; # izmir

Dizi anahtarları çıktılanabilir (string|bool|int) veri türlerinden herhangi birini içerebilir.

$kullanici = 
[
    'kullaniciAdi' => 'Ozan', 
    'sifre'        => '1234', 
    'eposta'       => '[email protected]'
];

echo $kullanici['kullaniciAdi'];
echo $kullanici['eposta'];

 

 

# Diziyi Objeye Çevirme


Dizileri obje veri türüne dönüştürerek de kullanabilirsiniz. Obje türüne dönüştürülecek dizilerin anahtar => değer çifti içeren formda olması kullanım açısından daha doğru olur. Yani anahtar içermeyen bir dizinin objeye çevrilmesi gereksizdir. Bu işlem tek yapılması gereken tanımlanmış bir diziye tür dönüşümü uygulamaktır.

$kullanici = (object)
[
    'kullaniciAdi' => 'Ozan', 
    'sifre'        => '1234', 
    'eposta'       => '[email protected]'
];

echo $kullanici->kullaniciAdi;
echo $kullanici->eposta;

Eğer geçersiz bir anahtar kullanılırsa aşağıdakine benzer bir hata atar.

echo $kullanici->telefon;
Notice: Undefined property: stdClass::$telefon in C:\xampp\htdocs\test.php on line 5 

 

 

# Çok Boyutlu Diziler


Çok boyutlu dizi kavramı bir dizi içinde dizi kullanımını ifade etmek için kullanılır. Bir dizi içinde iç içe kaç dizi tanımlaması varsa o kadar boyutlu dizi denir.

$sehirler = 
[
    ['isim' => 'istanbul', 'plaka' => '34'],
    ['isim' => 'izmir'   , 'plaka' => '35']
];

echo $sehirler[0]['isim'] . ':' . $sehirler[0]['plaka'];
echo $sehirler[1]['isim'] . ':' . $sehirler[1]['plaka'];
istanbul:34
izmir:35

Yukarıda 2 boyutlu dizi kullanım örneği gösterilmiştir. Çünkü iç içe 2 dizi kullanılmıştır. Zaten [] operatörlerinin yan yana 2 kez kullanıldığı onun 2 boyutlu olduğunu göstermektedir.

 

 

# Süper Küresel Diziler


Süper küreseller bütün etki alanlarında daima geçerli olan ön tanımlı dizi değişkenlerdir. PHP'nin kendine ait bazı ön tanımlı değişkenleri mevcuttur. Süper küresel denmesinin nedeni bu değişkenlere her türlü dosya veya fonksiyon üzerinde erişim sağlanabilir olmasıdır. Normal şartlarda bir fonksiyon içerisinde dışarıdan bir değişkeni doğrudan değer aktarmak için kullanmazken süper küreselleri kullanabilirsiniz. Aşağıda süper küresel dizi değişkenlerin listesi verilmiştir.

$GLOBALS Geçerli betiğin küresel alanında tanımlı bütün değişkenleri içeren bütünleşik bir dizidir. Değişken isimleri dizinin anahtarlarıdır.
$_SERVER $_SERVER başlıklar, yollar ve betiklerin yerleri gibi bilgileri içeren bir dizidir. Bu dizideki girdiler HTTP sunucusu tarafından oluşturulur. Bunlar genellikle her HTTP sunucusunda desteklenirler.
$_GET URL değiştirgeleri üzerinden geçerli betiğe aktarılan değişkenlerden oluşan bir ilişkisel dizi.
$_POST HTTP POST yöntemi kullanılarak geçerli betiğe aktarılan bütünleşik değişkenler dizisi.
$_FILES HTTP POST yönetimi kullanılarak geçerli betiğe yüklenen bütünleşik öğe dizisi.
$_COOKIE Geçerli betiğe HTTP Çerezleri üzerinden aktarılan bütünleşik bir değişken dizisi
$_SESSION Geçerli betikte kullanılabilecek oturum değişkenlerini içeren bir ilişkisel dizidir. Nasıl kullanıldığıyla ilgili daha fazla bilgi için Oturum İşlevleri belgesine bakınız.
$_REQUEST Öntanımlı olarak $_GET$_POST ve $_COOKIE değişkenlerini içeren ilişkisel bir dizidir.
$_ENV Ortam yönetimi kullanılarak geçerli betiğe aktarılan bütünleşik ortam değişkenleri dizisi. Bu değişkenler PHP yazım denetleyicisinin çalıştığı ortamdan PHP'nin küresel isim alanına ithal edilir. Çoğu PHP'nin altında çalıştığı kabuk (shell) tarafından sağlanır. Farklı sistemler farklı türde kabuklar çalıştırırlar, bu bakımdan tam bir tanımlı ortam değişkenleri listesi verilemez. 

Aşağıda örnek bir kullanım gösterilmiştir.

$merhaba = 'Merhaba';

echo $GLOBALS['merhaba'];
Merhaba