php中的命名空間namespace
==============================================
php中的命名空間namespace
==============================================
一、命名空間概述:
什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。
例如,在操作系統中目錄用來將相關文件分組,對於目錄中的文件來說,它就扮演了命名空間的角色。
具體舉個例子,如文件foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。
另外,在目錄 /home/greg 外訪問 foo.txt 文件時,我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。
這個原理應用到程序設計領域就是命名空間的概念。
二、定義命名空間:
1. 雖然任意合法的PHP代碼都可以包含在命名空間中,但只有三種類型的代碼受命名空間的影響,它們是:類,函數和常量。
2. 命名空間通過關鍵字namespace 來聲明。如果一個文件中包含命名空間,它必須在其它所有代碼之前聲明命名空間。
實例:
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
(瞭解)在聲明命名空間之前唯一合法的代碼是用於定義源文件編碼方式的 declare 語句。declare(encoding='ISO-8859-1');
三、定義子命名空間:
1. 與目錄和文件的關係很象,PHP 命名空間也允許指定層次化的命名空間的名稱。因此,命名空間的名字可以使用分層次的方式定義:
<?php
namespace MyProject\Sub\Level;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
四、在同一個文件中定義多個命名空間(不推薦):
1. 也可以在同一個文件中定義多個命名空間。在同一個文件中定義多個命名空間有兩種語法形式。
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
2. 不建議使用上面實例1的這種語法在單個文件中定義多個命名空間。建議使用下面的大括號形式的語法。
在實際的編程實踐中,非常不提倡在同一個文件中定義多個命名空間。這種方式的主要用於將多個 PHP 腳本合併在同一個文件中。
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
//不包含在命名空間中的代碼
namespace { // 全局代碼
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
php中的命名空間namespace
==============================================
一、命名空間概述:
什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。
例如,在操作系統中目錄用來將相關文件分組,對於目錄中的文件來說,它就扮演了命名空間的角色。
具體舉個例子,如文件foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。
另外,在目錄 /home/greg 外訪問 foo.txt 文件時,我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。
這個原理應用到程序設計領域就是命名空間的概念。
二、定義命名空間:
1. 雖然任意合法的PHP代碼都可以包含在命名空間中,但只有三種類型的代碼受命名空間的影響,它們是:類,函數和常量。
2. 命名空間通過關鍵字namespace 來聲明。如果一個文件中包含命名空間,它必須在其它所有代碼之前聲明命名空間。
實例:
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
(瞭解)在聲明命名空間之前唯一合法的代碼是用於定義源文件編碼方式的 declare 語句。declare(encoding='ISO-8859-1');
三、定義子命名空間:
1. 與目錄和文件的關係很象,PHP 命名空間也允許指定層次化的命名空間的名稱。因此,命名空間的名字可以使用分層次的方式定義:
<?php
namespace MyProject\Sub\Level;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
四、在同一個文件中定義多個命名空間(不推薦):
1. 也可以在同一個文件中定義多個命名空間。在同一個文件中定義多個命名空間有兩種語法形式。
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
2. 不建議使用上面實例1的這種語法在單個文件中定義多個命名空間。建議使用下面的大括號形式的語法。
在實際的編程實踐中,非常不提倡在同一個文件中定義多個命名空間。這種方式的主要用於將多個 PHP 腳本合併在同一個文件中。
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
//不包含在命名空間中的代碼
namespace { // 全局代碼
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.