Bugün size Yapısal Tasarım Desenlerinden Dekoratör Tasarım desenini yani orjinal adı Decorator Design Pattern'i ile anlatacağım..
class
Mysqli sınıfından yeni DB sınıfı türetelim
StandardBir arkadaşıma okulda hocası böyle bir ödev vermiş.. Mysqli sınıfından türetilmiş yeni bir DB sınıfı istiyordu kendisinden. Ne yaparım ne ederim diyordu ki bende ona bir örnek hazırladım en hızlı kısa ve basit yoldan..
PHP ve NameSpace Kullanımı
StandardMerhaba arkadaşlar,
Bugün hayatımıza php 5.3 ile birlikte giren bir yeniliği geçte olsa size bahsetmek isterim. NameSpace yani yani İsim Alanları..
Peki neye yarar? PHP’de benzer isimdeki class,constant ve function’ları aynı sayfa/proje içerisinde kullanmamızı sağlar ve daha okunabilir ve anlamlı object mimarileri kurmamızı sağlar. Windows File System olarak kafanızda canlandırabilirsiniz. C:\Onur\test.txt dosyasını düşünelim; aynı dosyadan bir tane daha koymamız durumunda hata verecektir ve üzerine yazacaktır ama C:\Tester\test.txt şeklinde koyarsak aynı sürücüde farklı dizinlerde aynı isimde farklı dosyalar olabilir. İşte buradaki Onur ve Tester dizinlerini namespace gibi canlandırabilirsiniz gözünüzde.
Heman bir örnek ile somutlaştırmak istiyorum;
<?php ######----ONUR CANALP----#### ## NAMESPACES ## ## 25.07.2013 ## ############################# // "Personel" isminde bir namespace tanımlıyorum. namespace Personel; // "Personel" namespace'i içinde "Temizlik" sınıfı oluşturuyorum. Class Temizlik { // "Temizlik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Personel namespace içindeki Temizlik çalışanları'; } } Class Teknik { // "Feed" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Personel namespace içindeki Teknik çalışanlar'; } } // "Yoneticiler" isminde bir namespace tanımlıyorum. namespace Yoneticiler; // "Yoneticiler" namespace'i içinde "Temizlik" sınıfı oluşturuyorum. Class Temizlik { // "Temizlik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Yöneticiler namespace içindeki Temizlik çalışanlar'; } } Class Teknik { // "Teknik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Yöneticiler namespace içindeki teknik çalışanlar'; } } // "Personel" namespace'i içinde bulunan "Temizlik" Sınıfını tanımlıyorum. $temizlik1 = new \Personel\Temizlik; // "Temizlik" namespace'i içinde bulunan "Temizlik" Sınıfını tanımlıyorum. $temizlik2 = new \Yoneticiler\Temizlik; // "Personel" namespace'i içinde bulunan "Teknik" Sınıfını tanımlıyorum. $teknik1 = new \Personel\Teknik; // "Temizlik" namespace'i içinde bulunan "Teknik" Sınıfını tanımlıyorum. $teknik2 = new \Yoneticiler\Teknik; // Sınıfların içinde bulunan fonksiyonları çağırıyoruz ve sonucu ekrana basıyoruz. echo '<p>' . $temizlik1->oku() . '</p>'; echo '<p>' . $temizlik2->oku() . '</p>'; echo '<p>' . $teknik1->oku() . '</p>'; echo '<p>' . $teknik2->oku() . '</p>'; ?>
PHP5 ve Final Kavramı
StandardPHP5 ile birlikte hayatımıza giren kavramlardan bir taneside sınıf ve metodlar için getirilen final kavramı…
işin özü final diyerek o metod veya sınıfın bir daha türetilememesini sağlamış bulunuyoruz.
O sınıf türetilmesin bozulmasın vs. diye böyle bir yol izlenebilir, karışık ve zor değil o yüzden direk örnek vereceğim ve taşlar oturacak kafanızda;
Sınıflarda Final Kullanımı
final class FinalSinif { public function abcMethod() { echo "FinalSinif method u çağrıldı"; } } //Compile error verecektir çünkü final sınıfı türetilemez class YeniSinif extends FinalSinif { public function abcMethod() { echo "YeniSinif method u çağrıldı"; } } $onur = new YeniSinif(); $onur->abcMethod();