PHP Design Pattern – Registry Pattern – Kayıt Tasarım Şablonun

Registry tasarım şablonu bize herhangi bir objecti yalnızlık tasarım şablonuna (signletion) göre kodlanmasa bile öyleymiş gibi kullanmamızı sağlıyor. Örneğin tek bir DB sınıfınız var ancak birden fazla veritabanına bağlanacaksınız dolayısıyla bunu yalnızlık tasarım şablonu ile yapmazsınız. İki Db için iki tane nesneniz olması gerekmektedir. Aşağıda bu problemin çözümünü bulacaksınız. Ayrıca Zend_Register sınıfının kodlarınıda incelmenizi tavsiye ederim.

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
 
class Registry 
{
    private static $_register;
 
    public static function add(&$item, $name = null)
    {
        if (is_object($item) && is_null($name)) {
            $name = get_class($item);
        } else {
            $msg = "You must provide a name for non-objects";
            throw new Exception($msg);
        } //eof ifelse
 
        $name = strtolower($name);
 
        self::$_register[$name] = $item;
    }
 
    public static function &get($name)
    {
        $name = strtolower($name);
 
        if (array_key_exists($name, self::$_register)) {
            return self::$_register[$name];
        } else {
            $msg = "'$name' is not registered.";
            throw new Exception($msg);
        } // eof ifelse
    }
 
    public static function exists($name)
    {
        $name = strtolower($name);
        if (array_key_exists($name, self::$_register)) {
            return true;
        } else {
            return false;
        } //eof ifelse
    }
} // eof class Registry
 
$db = new DB();
Registry::add($db);
 
// SOnra
 
if (Registry::exists('DB')) {
    $db = Registry::get('DB');
} else {
    die('We lost our DB connection.')
} //eof ifelse

Continue reading

, , ,

PHP Design Pattern – Factory Pattern – Fabrika Tasarım Şablonun

Fabrika tasarım şablonu soyut sınıflardan nesne üretmek için kullanılanır. Örnekler ile anlatırsak daha net anlaşılır.

Fabrika tasarım şablonu ne zaman kullanılır?

  1. Programcı, üreteceği nesnenin hangi sınıftan üretileceğini bilmiyorsa! Şimdi nasıl anlatalım bir veritabanı class’ı yapacaksınız ancak bunun MySQL ile mi yoksa MsSQL ile mi çalışacağına karar vermediniz!
  2. Programcı sınıf alt sınıflarından nasıl nesne üretilmesi gerektiğini bilmiyorsa! Örneğin MySQL’in connect fonksiyonu ile MsSQL’in connect fonksiyonlarının aldıkları parametreler birbirinden farklı.
  3. Programcı yeni nesne üretim işlemini tamamen alt sınıflara bırakmak istiyorsa! Örneğin DB sınıfındaki connect fonksiyonu veritabanına bağlanır ancak MySQL için MySQLDB sınıfı MsSQL için MySQLDB sınıfı bu işlemi yapacaktır.

3. örnek biraz horoz fıkrasına döndü horoza sormuşlar “tavuk mu yumurtadan çıkar yumurta mı tavuktan” horoz bakmış beni ilgilendirmez! Ben işimi yaparım demiş. OOP ye hoş geldiniz. DB sınıfının (Horoz) connect(); fonsiyonu veritbanına bağlanmaya yarar ancak MYSQL veya MsSQL olmasına göre işlemi MySQl veya MsSQL DB sınıflarına paslar.

Basit bir örnek ile tasarım şablonunu açıklayalım. Örnek sadeceliği ve basitliği yüzünden php|architect’in Zend Php 5 CErification Study Guide kitabından alınmıştır.

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
33
34
35
36
<?php
 
class Configuration {
    const STORE_INI = 1;
    const STORE_DB  = 2;
    const STORE_XML = 3;
 
    public static function getStore($type = self::STORE_XML)
    {
    	switch ($type)
    	{
    		case self::STORE_INI:
    		    return new Configuration_Ini();
    		case self::STORE_DB:
    		    return new Configuration_Db();
    		case self::STORE_XML:
    		    return new Configuration_Xml();
    		default
    		    throw new Exception("Bilinmeyen veri özelliği")
    	}
    } 
}
 
class Configuration_Ini {
	//blaa blaa
}
 
class Configuration_Db {
	//blaa blaa
}
 
class Configuration_Xml {
	//blaa blaa
}
 
$config = Configuration::getStore(Configuration::STORE_XML)

Yukarıdaki örnekten de anlayacağınız gibi ileride yeni ayarlarınız için yeni bir tip tanımladığınızda önrğin JSON tek yapmanız gereki Configuration_Json sınıfını tanımlamanız ve Configuration sınıfındaki getStore fonksiyonuna eklemek olacaktır. İleride patronunuzun sizden ne isteyeceğini bilemezsiniz. Ben kendimin patronu olmama rağmen bilmiyorum. :) O yüzden factory design patternini kullanmanız iyi bir programcı olmak yolunda önemlidir. Bugün XML, MySQL ile çalışabilirsiniz ancak ileride kodlarınızın MsSQL, JSON’uda desteklemesi için yeniden yazmak zorunda kalmayın.

Gelelim php|architect’in örneğine bu örnekte eksik olan Configuration_XXX sınıflarının bir Interface’den türetilmeyişidir. Bunları interfaceden türetmek en idealidir. İkinci olarakta getStore ismi yerine factory() ismini kullanmaları kod okunurluluğu sağlayacaktır.

Bir kaç kaynakta önerelim.

  1. http://www.php.net/manual/en/language.oop5.patterns.php
  2. http://www.bidb.itu.edu.tr/?d=893
  3. http://www.fluffycat.com/PHP-Design-Patterns/Factory-Method/

Continue reading

Changelog

Bugün genel olarak yaptığım projelerde changelog standartını belirledim.

1
2
3
4
5
6
7
8
9
10
11
12
13
<!--
CHANGELOG
--------------------------------------------------------------------
 
LEGEND
--------------------------------------------------------------------
* -> Security Fix	 	
# -> Bug Fix	 	
+ -> Addition	 	
^ -> Change	 	
- -> Removed	 	
! -> Note
-->

Umarım işinize yarar.

Continue reading


PHP Design Pattern – Singleton Pattern – Yalnızlık Tasarım Şablonun

Eğer bir sınıftan sadece bir tane nesne oluşturulacak ve bu nesne tüm sistem kullanılacak ise yalnızlık tasarım şablonu kullanır. Bununla ilgili verilecebilecek en iyi soyut örnek Tanrı Sınıfdır. Tanrı sınıfından sadece bir tane üretebiliriz çünkü tanrı tektir.

Daha somut bir örnek ile kodumuzu yazalım. Yalnızlık tasarım şablonu daha ziyade veritabanına bağlatılarda kullanılaiblir. Basit bir kod ile örnek verelim. Birinci örneğimiz PHP|Architect’s grubunun çıkardığı “Zend PHP 5 Certification Study Guide” kitabından alıntıdır.

Continue reading

, ,

Ubuntu Üzerine Apache2 , Php5, Mysql, Phpmyadmin Nasıl Kurulur

AMP – Linux, Apache, MySql ve Php’nin kısaltmalarıdır. Linux, Windows savaşlarında internette Windows’un kaybetmesinin tek nedeni bence Apache, Mysql ve Php (AMP) üçlüsünün inanılmaz bir uyum içinde Linux üzerinde çalışabilmesidir. Bu yazımızda Ubuntu Linux dağıtımı üzerinde AMP kurulumunu anlatacağım.

Root olalım

Bütün işlemleri root ile yapmayı unutmayınız! O yüzden ilk komnutumuz.

sudo su

Bir işlemi sudo veya su arasında yapmak arasında fark vardır. Sudo da işlemi kendi kullanıcınız yapar ancak root yetkisinde yapılır. Zaten su gibi do yap :) yani su gibi bu işi sen yap demeye gelir. Su ile yapmakta ise direk işlemi root’un kendisi yapar.

Apache2′nin kurulması

Apache2′yi bu aşağıdaki komut ile kurabilirsiniz.

aptitude install apache2

Test etmek için http://localhost yazmanız yeterlidir. Ekranda “It’s work” yazısı gelirse apache2 sorunsuz kurulmuştur. Eğer bir yazı gelmez ise sırası ile http://127.0.0.1 ve http://192.168.0.100 adreslerini deneyiniz.

Bazı önemli unsurlar

  1. Kök dizininiz var/www olacaktır.
  2. Ayar dosyanız /etc/apache2/apache2.conf olacaktır.
  3. Diğer ayarlarınız /etc/apache2 dizinin altında olacaktır.

MySQL 5 Kurulumu

aptitude install mysql-server mysql-client

Bu işlemden sonra aşağıdaki işlemler gelecektir. Şifrenizi yazmayı unutmayınız.

New password for the MySQL "root" user: <-- şifreniz
Repeat password for the MySQL "root" user: <-- şifreniz

Php5 Kurulumu

Php5 ve apache’nin php modülünü kurmak için

aptitude install php5 libapache2-mod-php5

Tekrar başlatmayı unutmayınız.

/etc/init.d/apache2 restart

PHPINFO yu görmek için

gedit /var/www/info.php
1
2
3
<?php
phpinfo();
?>

Daha sonra http://localhost/info.php adresinden test edebilirsiniz.

Continue reading

git’i linux üzerine kurmak

Aşağıdaki kod işinize yarayacaktır.

1
sudo apt-get install git-core git-gui git-doc

Continue reading


Ubuntu 10.04 Sun Java JDK Kurulumu

Ubuntu üzerinde OpenJDK değilde Sun JDK kullanmak isterseniz. Aşağıdaki kod işinizi görecektir.

1
2
3
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-jre

Kaynak

  1. http://www.onuratci.com/index.php/2010/05/ubuntu-10-04-java-jdk-kurulumu/
  2. http://www.volkantokmak.com/blog/2010/05/ubuntu-10-04-jdk-sorunsali/

Continue reading

, , ,

gEdit ve Zen Coding

Genel bilgiler…

- Ana Safya – http://code.google.com/p/zen-coding/
- Download Linki : Zen Coding
- Demo Video – http://vimeo.com/7405114
- Örnekler http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/
- Özellikler http://code.google.com/p/zen-coding/wiki/Actions

Kısayollar

- Expand abbreviation with `Ctrl+E`
- Expand abbreviation as you type with `Ctrl+Alt+E`
- Wrap with abbreviation with `Ctrl+Shift+E`
- Balance tag inward or outward with `Ctrl+Alt+I` or `Ctrl+Alt+O`
- Merge lines with `Ctrl+Alt+M`
- Go to previous or next edit point with `Alt+Left` and `Alt+Right`
- Remove tag with `Ctrl+Alt+R`
- Split or join tags with `Ctrl+Alt+J`
- Toggle comment with `Ctrl+Alt+C`

Kurulum

1. Download [zip](http://github.com/mikecrittenden/zen-coding-gedit/zipball/master) or [tar](http://github.com/mikecrittenden/zen-coding-gedit/tarball/master) source and unpack it.
2. Move `zencoding.gedit-plugin` and the `zencoding` folder into `~/.gnome2/gedit/plugins/`
3. In Gedit, go to Edit → Preferences → Plugins to enable the plugin.
4. Try it out using the shortcut keys listed above.

Continue reading

ExtJs Ext Sınıfı Ext.type() fonksiyonu

Ext.type() fonsiyonu size verdiğiniz parametrenin tipini döndürür. Aslınd abu çok önemli bir fonksiyondur çünkü javascript çalışma zamanında verilerin tiplerini değiştirebilme özelliğine sahip loosetyping bir dildir. Bu dili güçlü kıldığı gibi programcının çok büyük hatalar yapmasına neden olur. O yüzden javascriptte mümkün olduğunca değişkenlerin tipleri tanımlanmalı ve kontrol edilmelidir. Kullanımı aşağıdaki gibidir.

1
2
3
Ext.type(123); // output number
Ext.type("bla bla") // string
Ext.type(new Function()); // Function

Continue reading

,

ExtJs Ext Kütüphanesi ve addBehaviors Fonksiyonu

addBehaviors fonksiyonunu basitce özetlersek HTML elementlerinize handler ile Event atamanızı sağlıyor. Aşağıdaki örnek img html elementine yani resimlerin üzerine click eventi olunca tanımlanan fonksiyonun çalışmasını sağlıyor.

1
2
3
4
5
Ext.addBehaviors({
    "img@click" : function(e, t) {
        alert("Resime tıkladınız");
    } 
});

Continue reading

,

prev posts