PHP SPL — PHP Standard Library

Paylaş

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.

Veri tipleri

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.

Iteratorler

DirectoryIterator: Bir dizin içeriğini okur.

LimitIterator: Başka bir iterator’un belirli eleman aralığını kullanır. (İlk 5 eleman gibi)

Interfaceler

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.

Design Pattern yardımcıları

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.

Fonksiyonlar

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.

Exceptionlar

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:

Exception

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.