PHP命名空間

PHP命名空間

PHP命名空間在5.3中加入,主要是爲了解決以下兩類問題:

  1. 用戶編寫的代碼與PHP內部的類/函數/常亮或第三方類/函數/常亮之間的名字衝突。
  2. 爲長的標識符名稱創建一個別名,提高代碼的可讀性。

定義命名空間

命名空間通過關鍵字namespace來聲明,如果一個文件中包含命名空間就必須在所有代碼之前聲明。

<?php
namespace MyProject;
//代碼

在一個文件中可以定義不同的空間代碼

<?php
namespace MyProject1 {
//MyProject1空間
class a{/*...*/};
const b;
function c(){};
}

namespace MyProject2 {
//MyProjects空間
class a{/*...*/};
const b;
function c(){/*...*/};
}

namespace {
//全局代碼部分
$a=MyProject1\c();
echo MyProject\a::d();
}

在聲明命名空間之前的唯一合法代碼是用於定義源文件編碼方式的declare語句。所有非PHP代碼包括空白字符都不能出現在命名空間的聲明之前。

declare(encoding='UTF-8');

子命名空間

命名空間的名字可以使用分層次的方式定義:

namespace MyProject\Sub\Level;

命名空間的使用

有三種方式引入:

  1. 非限定名稱,或不包含前綴的類名稱。
  2. 限定名稱,或包含前綴的名稱。
  3. 完全限定名稱,或包含了全局前綴操作符的名稱。完全限定名稱,或包含了全局前綴操作符的名稱。
    實例:
    file1.php
<?php
namespace Foo\Bar\subnamespace;

const foo = 1;
function foo(){}
class foo
{
	static function staticmethod(){}
}

file2.php

<?php
namespace Foo\Bar\
const FOO = 2;
function foo(){}
class foo
{
	static function staticmethod(){}
}

/*非限定名稱*/
foo();//解析爲函數 Foo\Bar\foo
foo::staticmethod();//解析爲類 Foo\Bar\foo,方法爲staticmethod
echo FOO;//解析爲常亮

/*限定名稱*/
subnamespace\foo(); // 解析爲函數 Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析爲類 Foo\Bar\subnamespace\foo, 以及類的方法 staticmethod
echo subnamespace\FOO; // 解析爲常量 Foo\Bar\subnamespace\FOO

/*完全限定名稱*/
\Foo\Bar\foo(); // 解析爲函數 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析爲類 Foo\Bar\foo, 以及類的方法 staticmethod
echo \Foo\Bar\FOO; // 解析爲常量 Foo\Bar\FOO
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章