RSS
 

PHP NameSpace Kullanımı

22 Feb

Merhaba,

Bildiğiniz üzere PHP,  5.3.x versiyonundan itibaren NameSpace ‘i desteklemeye başlamıştı. PHP 6.x ile OOP adına bir çok şeyin yerine oturmasını bekliyorum ve PHP 6′yı sabırsızlıkla bekliyorum.

Öncelikle NameSpace’ler hakkında kısa bir bilgi verelim ve hemen örneklere geçelim. NameSpace yani İsim Alanları 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.

X:\ sürücü altına bir klasör oluşturup herşeyi bunun içine koyduğunuzu düşünün. İçindeki dosya sayısı 1.000′i geçtiğinde veya yaklaştığında, artık içinde bir şey bulmanız zorlaşacaktır. NameSpace’leri PC’ye uyarlarsak. A0023.jpg diye bir dosyanızın olduğunu varsayalım. Bu dosyayı X:\ sürücüsünün içindeki 10,000 dosya içerisinde aramak mı daha kolay? Yoksa X:\ sürüsünün altına X:\Photos\Summer\2009\A0023.jpg diye bir path’te bulmak mı? NameSpace’ler de bu şekilde kodlarımızı ayırmamızı sağlar. Yine WFS(Windows File System)’de olduğu gibi X:\Photos\Summer dizini altına  foo.txt diye bir dosya oluşturabileceğiniz gibi X:\Photos\Summer\2009 dizini altınada aynı isimde bir dosya oluşturanız WFS size karışmayacaktır.

Aynısını NameSpace’e göre açıklarsak; fooPage.php içerisinde  namespace spaceOne {  const fooC = 9; } ve namespace spaceTwo{ const fooC = 7; } diye yazdığımızda ikitane aynı isimde constant olmasına PHP kızmayacaktır. Çünkü farklı namespace’ler de bulunmaktalar. WFS’e göre farklı dizinler diye düşünebilirsiniz.

Şimdi örnek ile namespace kullanımını ve namespace içerisinde farklı bir namespace’i kullanmayı görelim;

<?php
/**
 * PHP | NameSpace
 * @author Hakan DAMAR
 * @link http://www.hakandamar.com
 */
declare(encoding="UTF-8");

namespace mainSpace{

 const conn_open = 1;
 class Connection{}
 function Connect(){}

}

namespace secondSpace{
	const conn_open = "Connected";
	class Connection{}
	function Connect(){}
}

namespace childSpace{
	use secondSpace as ss;
	function getConnectionStatus(){
		$conn_open = ss\conn_open . "!!!";
		return $conn_open;
	}
}

namespace {

	print(\mainSpace\conn_open."<br/>");
	print(\secondSpace\conn_open."<br/>");
	print(\childSpace\getConnectionStatus());

}
?>

Örnektende anlaşılacağı üzere namespace’ler namespace <nameSpace Adi> şeklinde tanımlanır. Peki, en altta isimsiz bir namespace var? O global namespace’dir.
İçerisinde hem diğer namespace’leri çağırabilirsiniz hem de normal PHP kodlarınızı yazmaya devam edebilirsiniz.
En üstteki declare() metodu object’in encoding’ini belirtmek için kullanılmaktadır. enconding haricindeki Diğer property’leri namespace kullanılan sayfalarda kullanılamaz!

Bir de childSpace’de use secondSpace ile seconSpace’i çağırdık ve as ss ile secondSpace ismini ss keyword’ne atadık. Değişken tanımlamak gibi düşünürsek $ss = “secondSpace”; dir.
Bundan dolayıda artık secondSpace’i ss temsil edecektir. Bu nedenle $conn_open variable’ın da secondSpace\conn_open yerine ss\conn_open kullanılmıştır.

NOT: namespace tanımı üzerinde declare(); metodu hariç hiç bir kod olamaz, aksi taktirde PHP Compiler ERROR dönecektir.

İyi Çalışmalar.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Diigo
  • email
  • PDF
  • Reddit
  • RSS
  • StumbleUpon
  • Technorati
  • Twitter
  • Yahoo! Bookmarks
  • DotNetKicks
  • Fleck
  • FriendFeed
  • HackerNews
  • LinkedIn
  • Live
  • Yahoo! Buzz
  • Yigg
 
2 Comments

Posted in PHP

 

Tags: , ,

Leave a Reply

 
 
  1. PİRATEHUNTER

    25/02/2010 at 14:26

    konu ıcın tesekkurler acıklayıcı olmus :]

     
  2. HD

    09/05/2010 at 08:06

    Rica ederim. :)