PHP’nin 5.1 sürümüyle birlikte “Standard PHP Library” (SPL) isimli bir kavram tanıtıldı. SPL içerisinde, PHP geliştiricilerinin çok kullanıldığına kanaat getirdikleri bir takım hazır tip ve fonksiyon tanımları mevcut. Bu tanımlar PHP bünyesinde servis edilerek, bir çok kütüphane ve yazılımcının bir standart üzerinden çalışmasına imkan veriyor. Ne yazık ki bir çok geliştirici SPL’den habersiz olarak geliştirme yapmaya devam ediyor.
PHP Manual’ın SPL ile ilgili bölümünü paste etmektense burada bir özet geçmek isterim.
SplStack: Bir array üzerinde array_pop, array_push dışında bir işlem yapmıyorsanız array alternatifidir.
SplQueue: Bir array
üzerinde array_shift
, array_push
dışında bir işlem yapmıyorsanız array
alternatifidir.
SplPriorityQueue: Bir array’e eklediğiniz elemanların önemlilik sıraları varsa ve bu elemanları array’i okurken her zaman önem sırasına göre almak istiyorsanız array alternatifidir.
SplFixedArray: Bir array’e ekleyeceğiniz eleman sayısını önceden biliyorsanız array alternatifidir.
DirectoryIterator: Bir dizin içeriğini okur.
LimitIterator: Başka bir iterator’un belirli eleman aralığını kullanır. (İlk 5 eleman gibi)
Countable: Sınıfın
count
fonksiyonu ile sayılabilir olmasını sağlar.
Serializable*:
Sınıfın serialize
ve unserialize
fonksiyonlarıyla çalışabilmesini sağlar.
ArrayAccess*: Sınıfın
array gibi davranmasını, oluşan nesnenin $nesne[‘eleman’]
biçiminde erişimini
sağlar.
Traversable*: Sınıfın
foreach ile dolaşılabileceği bilgisidir. Iterator
veya IteratorAggregate
ile
birlikte kullanılır.
Iterator*: Sınıfın
foreach
ile dolaşılabilmesini sağlar.
IteratorAggregate: Yine sınıfın dolaşılabilmesini sağlayan bir iterator sınıfına sahip olduğunu belirtir.
SplObserver: Observer design pattern’deki gözetleyen ve güncellemeleri alan sınıf interface’i.
SplSubject: Observer design pattern’de gözeticilerin abone oldukları sınıf interface’i.
iterator_to_array: Elinizdeki bir iterator’ı foreach’le dönmeksizin array’e dönüştürür.
iterator_apply: Bir iterator’ın her elemanı için parametre olarak verdiğiniz fonksiyonu çalıştırır.
iterator_count:
count
ile sayamadığınız bir iterator’ın eleman sayısını verir.
Kendi Exceptionlarınızı yalnızca Exception
sınıfından değil, bir çok yer
sınıftan türetebilir böylece istisnai durumları yakalarken daha net tip
ayrımlarında bulunabilirsiniz. Hatta benim önerim, PHP gibi interpreter tabanlı,
runtime’ı request-response ile sınırlı (tek tüketimlik) bir ortam için mümkün
olduğunca mevcut sınıfları kullanın. SPL’nin önemi de bu noktada belirginleşiyor
zaten. Exceptionların anlamlarını teker teker yazmak isterdim ama isimleri zaten
yeterince açıklayıcı, burada önemli olan bu Exceptionların inheritance yapısı, o
da şu şekilde:
Son olarak, kesin bir çizgi olmamakla birlikte, ben kendi yorumumca:
LogicException
‘ı kullanıcı/programcı tarafından yanlış bir işlem yapıldığında,
RuntimeException
‘ı ise bir işlem gerçekleştirirken bir zorluk oluştuğunda
kullanıyorum. ErrorException
zaten PHP’nin hata oluştuğunda kullandığı özel
bir sınıf.