Merhabalar,
Olay güdümlü (EvendBased) programlama bize her alanda lazım olabilecek, ve bazı yerlerde kod kalabalığı yerine işlemleri bölebilmemize yarayabilecek bir metod, daha önce Csharp kategorisinde event based programming ile ilgili ufak bir örnek yapmıştım, bu örneği bir de php ile göstermek istedim, open source scriptlerin çoğu, hatta hepsi diyebiliriz event’ları plugin amaçlı kullanmaktadır. Aslında bi bakıma doğru bir yaklaşım çünkü modüleriteden farklı ama aynı zamanda modüleriteyi sağlayabilecek yapıyıbir arada ancak böyle yazabilirsiniz.
Abstract:
- Anasayfa
- Header
- Header başlamadan önceki işlemler (BeforeHeader Event)
- Gerçek header işlemleri
- Header sonrası işlemler (AfterHeader Event)
- Content
- Content başlamadan önceki işlemler (BeforeContent Event)
- Gerçek content işlemleri
- Postlar
- Post Öncesi işlem (BeforePost Event)
- Post İşlemi
- Post Sonrası işlemler (AfterPost Event)
- Pagination
- Content sonrası işlemler (AfterContent Event)
Bu event flaglari tam burada yapılacak işlem var mı diye kontrol edilip varsa çalışıtırılan, gerekirse kendisinden sonraki işlemi etkileyebilecek processleri yürüten kısımlardır. Bizim de kendi scriptlerimizde, olay noktalarımız ve bu noktalarda tetiklenmesi gereken diğer olayları kontrol eden bir mekanizmamız olsun istiyoruz. O halde. Öncelikle basit bir event.bind ve event.run metodları olan bir sınıf hazırlayalım
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php class event { #callbacks array. private static $flags = array(); /** * register a callback for an event point. */ public static function register($event_point,$callback) { self::$flags[$event_point][] = $callback; } /** * run event_points callback at this time! */ public static function run($event_point) { if(isset(self::$flags[$event_point])) { foreach(self::$flags[$event_point] as $callback) { if(is_callable($callback)) { call_user_func($callback); } } } } } ?> |
sınıfımız basit olarak verilen fonksiyonu belirttiğimiz point name ile saklıyor ve run() denilen yerde o point name için verilmiş tüm callbackleri çalıştırıyor. aşağıdaki bir sayfamız olduğunu düşünelim,
0 1 2 | event::run('before_header'); echo "burası header"; event::run('after_header'); |
bu sayfamızda, headerdan önce ve sonra bir event point var, header oncesinde ve sonrasında yapaağımız işlemlerde artık headera dokunmadan “event” sınıfımızı kullanarak yapabiliriz (plugin mantığı yani)
şimdi bir event register örneği yapalım.
0 1 2 3 4 5 6 7 8 9 | event::register('before_header',function() { echo "header başlamadan önce bu event çalıştı"; }); event::register('after_header',function() { echo "header bittikten sonra bu event çalıştı"; }); |
php mantığını unutmayalım register() fonksiyonları run() dan önce yazılmalı, sistemlerimizi buna göre yapalım. pek açık olmasa da php bilginize bağlı olarak pek zor bir iş olmayacaktır sizin için, sorularınız varsa bu post altına alabilirim, Teşekkürler







