Nyheter i PHP 5.3 Del 2 – Namespaces

I en tidigare post skrev jag om Nyheter i PHP 5.3 och visade funktionaliteten med Lambda och Closures. Naturligtvis var inte detta de ända nyheterna. Jag tänkte därför i denna post gå igenom den kanske bästa nyheten, nämligen Namespaces.

Den främsta anledningen att använda Namespaces är för att komma ifrån problemet med namnkollisioner. Zend har tidigare löst det med en hierarki, till exempel Zend_Db_Table. Dessa kan dock bli väldigt långa som till exempel denna Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive()

Ett exempel med Namespace

Jag kommer gå igenom ett väldigt enkelt exempel med namespace.

namespace Blog;
class User
{
	public function Hello()
	{
		echo "Hello World! from " . __NAMESPACE__ . " - " . __CLASS__;
	}
}

namespace CMS;
class User
{
	public function Hello()
	{
		echo "Hello World! from " . __NAMESPACE__ . " - " . __CLASS__;
	}
}

I detta exemplet har vi skapat två stycken namespaces, Blog och CMS. Här ser man redan fördelar med att använda namespaces, vi kan i detta exemplet nämligen ha två klasser med samma namn, User.

För att avända våra namespaces, klasser och funktioner använder vi följande kod.

$object = new CMS\User();
$object2 = new Blog\User();
	
$object->Hello();
$object2->Hello();

Resultatet av följande kod kommer bli:
Bild 20
Ett annat tips när det gäller namespaces är att du kan skapa ett alias för en klass.

use CMS\User as cmsuser;
use Blog\User as bloguser;
$object = new cmsuser();
$object2 = new bloguser();

Här skapar vi två stycken alias, cmsuser och bloguser, dessa kan vi sedan använda för att skapa objektet.

Sub-namespaces

Namespaces fungerar i stort sätt som en katalogstruktur. Du kan alltså skapa sub-namespaces, till exempel.

namespace Baronen\Blog;
class User
{
	public function Hello()
	{
		echo "Hello World! from " . __NAMESPACE__ . " - " . __CLASS__;
	}
}

Notera här att jag har ändrat namnet till Baronen\Blog. Tillvägagångssättet för att använda klassen är detsamma.

$object = new Baronen\Blog\User();

Vill du läsa mer om namespaces rekommenderar jag som vanligt den officiella dokumentationen.

Vill du veta mer om nyheterna i PHP 5.3 hittar du det här.

Som jag nämnt tidigare hoppas jag webbhotellen tar till sig nya versionen av PHP så snart som möjligt.

2 Replies to “Nyheter i PHP 5.3 Del 2 – Namespaces”

Din kommentar eller åsikt