Array vs Object (Dizilere Karşı Nesneler)
PHP ile kod geliştirenlerin nesneleri veri tutmak amaçlı kullanma alışkanlığı olduğunu sanmıyorum. PHP zengin kullanım şekilleri olan bir dil olduğundan kimisi nesne tabanlı, kimisi fonksiyonlar aracılığı ile kod yazarken kimisi de fonksiyon dahi kullanmadan tamamen düz metin gibi yazıyor :) Hepsini bir kenara atalım. Fonksiyonlar metodlar vs. vs. değil de biz bu nesneleri neden C dilindeki struct gibi bilgi tutmak amaçlı kullanmayalım ki?
Aslında kullanılamaz diye birşey söz konusu olmasa da,yaygın kullanılmamasına bir kaç sebep var. Bu sebeplerden birincisi, yeterince esnek olmaması. Yani kullanılacak alanlar önceden belirlenmeli.
class iletiler { public $isim; public $ileti; }
şeklinde tanımlanmış bir nesneye ancak ileti ve isim alanları girilebilirken, benzeri bir dizi için ön kurulum gerekmezken, istediğiniz kopyalara ek bilgilerde eklemeniz mümkündür. İkinci sebep ise, nesnelerin hala php dili için popüler hale gelmemiş olmasıdır. Genellikle kodlar nesne tabalı değil procedural(karşılık olarak hangi terim kullanılıyor bilmiyorum ancak bundan sonra tekrar geçerse fonksiyonel diyeceğim) olarak yazılıyor. Dolayısıyla insanların nesnelere bir el alışkanlığı dahilinde yaklaşmaları da mümkün olmuyor. Benim için esas önemli olan kısım çalışma süreleri, bellek tüketimleri gibi özellikler. O kod iyiydi, bu kod iyiydi şeklinde farklı farklı değerlendirmeler oluyor. Birinin dediğini diğerinin ki tutmuyor. Hatta başka kişileri geçtim, benim daha önceki söylediklerim bile bazen bugünü tutmuyor. O yüzden daha kesin ve net cevaplar vermek istediğimden, xdebug ile aynı amaca hizmet eden denk örnekler yazacağım.
Bu işleme geçmeden önce bellek hesabı yapmak için bir fonksiyon yazalım
logaritma fonksiyonu aracılığı ile kısa yoldan birimi buluyorum. Verdiğimiz sayısal büyüklük içinde kaç tane 1024 çarpanı olduğunu buluyor. 0 demek içinde 1024 yok demek, bu durumda KB dahi edemiyordur. 1 demek sayımız 1024 ten büyük 1024*1024 ten küçük demek. bir de mb için 3 belirttim bu da sayımız 1024*1024 ile 1024*1024*1024 arasında demek. Daha yüksek dereceleri görmemize zaten gerek yok.
Sonraki sayfa: İlk bellek denemesi