• 12-08-2010, 16:07:55
    #1
    Merhaba Arkadaşlar,

    Php'de nasıl namespace kullanacağımıza dair bir örnek hazırladım. Aşağıda kodları ve açıklama satırlarını bulabilirsiniz.

    ÖRNEK 1 :

    <?php
    
    /*
     * Author	: İbrahim HIZLIOĞLU
     * E-Mail	: ibrahim.hizlioglu@gmail.com
     * Web		: http://www.webteders.com
     */
    
    /*
     * Namespace ile içinde sınıfları barındıran bir kütüphane hazırlayabiliyoruz.
     * Bu örnekte "Facebook" ve "Twitter" olmak üzere 2 tane namespace oluşturuyoruz.
     * Ve bu namespace içinde "User" ve "Feed" olmak üzere 2 tane sınıf oluşturuyoruz.
     * Eğer namespace kullanmasaydık aynı ismi taşıyan başka bir sınıf oluşturamayacaktık.
     */
     
    # "Facebook" isminde bir namespace tanımlıyorum.
    namespace Facebook;
    
    # "Facebook" namespace'i içinde "User" sınıfı oluşturuyorum.
    Class User
    {
    	# "User" sınıfı içinde "data" isminde bir fonksiyon oluşturuyorum.
    	public function data()
    	{
    		return 'Facebook\User';
    	}
    }
    
    Class Feed
    {
    	# "Feed" sınıfı içinde "data" isminde bir fonksiyon oluşturuyorum.
    	public function data()
    	{
    		return 'Facebook\Feed';
    	}
    }
    
    # "Twitter" isminde bir namespace tanımlıyorum.
    namespace Twitter;
    
    # "Twitter" namespace'i içinde "User" sınıfı oluşturuyorum.
    Class User
    {
    	# "User" sınıfı içinde "data" isminde bir fonksiyon oluşturuyorum.
    	public function data()
    	{
    		return 'Twitter\User';
    	}
    }
    
    Class Feed
    {
    	# "Feed" sınıfı içinde "data" isminde bir fonksiyon oluşturuyorum.
    	public function data()
    	{
    		return 'Twitter\Feed';
    	}
    }
    
    # "Facebook" namespace'i içinde bulunan "User" Sınıfını tanımlıyorum.
    $user1 = new \Facebook\User;
    # "Twitter" namespace'i içinde bulunan "User" Sınıfını tanımlıyorum.
    $user2 = new \Twitter\User;
    
    # "Facebook" namespace'i içinde bulunan "Feed" Sınıfını tanımlıyorum.
    $feed1 = new \Facebook\Feed;
    # "Twitter" namespace'i içinde bulunan "Feed" Sınıfını tanımlıyorum.
    $feed2 = new \Twitter\Feed;
    
    # Sınıfların içinde bulunan fonksiyonları çağırıyoruz ve sonucu ekrana basıyoruz.
    echo '<p>' . $user1->data() . '</p>';
    echo '<p>' . $user2->data() . '</p>';
    echo '<p>' . $feed1->data() . '</p>';
    echo '<p>' . $feed2->data() . '</p>';
    
    ?>
    ÖRNEK 2 :

    namespace.php isminde oluşturduğumuz dosyamız :

    <?php
    
    # "Galatasaray" isminde bir namespace tanımlıyoruz.
    namespace Galatasaray 
    {
    	# "Galatasaray" Namespace'ine "Oyuncular" isminde bir sınıf tanımlıyoruz.
    	Class Oyuncular
    	{
    		# "Oyuncular" Sınıfına "Forvetler" isminde bir fonksiyon tanımlıyoruz.
    		public function Forvetler()
    		{
    			return 'Baros, Mehmet Battal';
    		}
    	}
    }
    
    # "Fenerbahce" isminde bir namespace tanımlıyoruz.
    namespace Fenerbahce 
    {
    	# "Fenerbahce" Namespace'ine "Oyuncular" isminde bir sınıf tanımlıyoruz.
    	Class Oyuncular
    	{
    		# "Oyuncular" Sınıfına "Forvetler" isminde bir fonksiyon tanımlıyoruz.
    		public function Forvetler()
    		{
    			return 'Semih, Gokhan';
    		}
    	}
    }
    
    ?>
    Ve çalıştıracağımız dosyamızıda hazırlıyoruz.

    <?php
    
    # Namespace tanımladığımız dosyamızı dahil ediyoruz.
    include 'namespace.php';
    
    # "Galatasaray" namespace'i altındaki "Oyuncular" sınıfını tanımlıyoruz.
    $galatasaray = new \Galatasaray\Oyuncular;
    
    # "Fenerbahce" namespace'i altındaki "Oyuncular" sınıfını tanımlıyoruz.
    $fenerbahce = new \Fenerbahce\Oyuncular;
    
    # "Galatasaray" namespace'i altındaki "Oyuncular" sınıfına ait olan "Forvetler" fonksiyonundan dönen değeri ekrana basıyoruz.
    echo '<p>Galatasaraylı Forvetler : ' . $galatasaray->Forvetler() . '</p>';
    
    # "Fenerbahce" namespace'i altındaki "Oyuncular" sınıfına ait olan "Forvetler" fonksiyonundan dönen değeri ekrana basıyoruz.
    echo '<p>Fenerbahçeli Forvetler : ' . $fenerbahce->Forvetler() . '</p>';
    
    ?>
  • 12-08-2010, 19:21:49
    #2
    Üyeliği durduruldu
    Paylaşım güzel, yeni bir konu fakat bu kod hiç çalışacak gibi durmuyor

    forumun php editoru mu bozdu acaba ?
  • 12-08-2010, 19:54:20
    #3
    D3LLy adlı üyeden alıntı: mesajı görüntüle
    Paylaşım güzel, yeni bir konu fakat bu kod hiç çalışacak gibi durmuyor

    forumun php editoru mu bozdu acaba ?
    Çalışacak gibi durmuyor derken? Size göre neresi yanlış?
  • 12-08-2010, 20:59:12
    #4
    Üyeliği durduruldu
    Çok iyi bir paylaşım. teşekkürler. İlla ki kullanmamız gereken yerler çıkar. Farklı sağlayıcıların sunduğu aynı işlemler için çok kullanışlı olur. Her php işlemi gibi bu da isteğe ve ihtiyaca göre geliştirilebilir, mükemmel işler çıkartılabilir.

    Teşekkürler.
  • 12-08-2010, 21:06:41
    #5
    Tam olarak ne işe yaradığını anlayamadım ben.
  • 12-08-2010, 21:28:22
    #6
    Üyeliği durduruldu
    Hkan adlı üyeden alıntı: mesajı görüntüle
    Tam olarak ne işe yaradığını anlayamadım ben.
    Normalde aynı isimde farklı class'lar oluşturamazsın, onun için iki farklı namespace oluşturup onların içine ekleniyor, yani facebook namespace'i içindeki user class'ı oluyor, ek olarak Twitter namespace'i içinde başka bir user class'ı oluyor. Çağırırken de ona göre çağırıyorsun. İyice karıştırmamışımdır umarım kafanı.
  • 12-08-2010, 22:11:55
    #7
    Eposta Aktivasyonu Gerekmekte
    interface yazsakta aynı işi görmez mi?
  • 12-08-2010, 23:01:00
    #8
    Üyeliği durduruldu
    OfisSoft adlı üyeden alıntı: mesajı görüntüle
    Çalışacak gibi durmuyor derken? Size göre neresi yanlış?
    son yazılan namescape Twitter. sonraki kodların hepsi bu namespace içinde çalışacak doğru mu ?.

    ve bu namespace içinde FaceBookUser; diye birşey yok ?

        use Facebook\User as FaceBookUser;
        use Facebook\Feed as FacebookFeed;
        use Twitter\User as TwitterUser;
        use Twitter\Feed as TwitterFeed;
    bu satırlar eksik gibi geldi

    ya da new FacebookUser deil de new Facebook\User; yine Twitter namespace'i alında Facebook diye bir namespace olmadığı için bu instance oluşmaz. doğru değil mi sizce ?
  • 12-08-2010, 23:26:31
    #9
    D3LLy adlı üyeden alıntı: mesajı görüntüle
    son yazılan namescape Twitter. sonraki kodların hepsi bu namespace içinde çalışacak doğru mu ?.

    ve bu namespace içinde FaceBookUser; diye birşey yok ?

        use Facebook\User as FaceBookUser;
        use Facebook\Feed as FacebookFeed;
        use Twitter\User as TwitterUser;
        use Twitter\Feed as TwitterFeed;
    bu satırlar eksik gibi geldi

    ya da new FacebookUser deil de new Facebook\User; yine Twitter namespace'i alında Facebook diye bir namespace olmadığı için bu instance oluşmaz. doğru değil mi sizce ?
    En aşağıda tanımlamaları yaptığımız ve echo ile ekrana bastığımız kısımlar Twitter namespace'i içinde çalışıyor.

    Ancak gözden kaçırdığınız bir şey var.

    $user1 = new \Facebook\User;
    Burada en başa \ karakterini koyduğumuz için aslında Twitter namespace'i içinde aramıyor. Eğer :

    $user1 = new Facebook\User;
    şeklinde yazsaydım o zaman Twitter namespace'i içinde arayacaktı. Dosya yapısı gibi düşünürseniz en başa \ koymak root'a çıkmak gibi oluyor.

    Not : İlk mesaja 2. bir örnek ekledim. Anlamayan arkadaşların konuyu daha iyi kavrayabilmesi için futbol üzerinden bir anlatım yaptım. Umarım anlaşılır olmuştur.