PHP Namespace New: 一個有效的命名空間技術
隨著應用程序越來越大,命名沖突越來越成為一個問題,比如,兩個庫可能會發生函數名相同的沖突,缺乏一個有效的管理機制會使代碼難以維護。
這時候,一個強大的工具 - PHP 的命名空間(Namespace)就派上了用場,其提供了一種將元素組織到邏輯分組中的方式,這通常是包、類和函數。
在 PHP 5.3 版本之后就提供了命名空間的支持,而在這之前分組組織代碼元素只能借助于類名前綴。
讓我們看看以下的例子:
<?php
namespace myproject\media\video;
class notFoundException extends Exception {}
$a = new notFoundException();
echo get_class($a);
?>
這里,我們定義了一個 Exception 的子類,將其放在了一個名為 myproject\media\video 的命名空間中。當我們實例化這個類時,我們使用了命名空間名稱來訪問類,因此這是完全正確的做法。最后,輸出結果為 myproject\media\video\notFoundException。
下面是一些很好的使用命名空間的例子:
文件 System/Core/Utils.php 代碼如下:
<?php
namespace System\Core;
class Utils {
static function is_selected($data,$value)
{
return $data==$value ? 'selected' : null;
}
}
?>
我們有一個 util 類,用于返回 select 的 HTML,它的使用方式如下:
<select name='status'>
<option value='1' {<?php echo System\Core\Utils::is_selected($row['status'],1);?>}>Active</option>
<option value='0' {<?php echo System\Core\Utils::is_selected($row['status'],0);?>}>Inactive</option>
</select>
如此一來,我們完全避免了在代碼中可能出現的大量拼接字符串。
除了命名空間之外,我們可以使用 define 函數在 PHP 中創建常量,然后在應用程序的每個文件中使用它們。
用 define 應該遵循以下規則:
- 常量名應該是大寫字母,使用下劃線分隔
- 相互關聯的常量應該存在于一個命名空間中
- 常量應該在時刻使用之前就被定義好
比如:
define("MY_VALUE", 1234, true); // true 表示不區分大小寫
echo MY_VALUE; // 返回 1234
echo my_value; // 返回 1234
命名空間并不僅僅是一個獨立的、可插拔的代碼包,它還可以作為代碼的組織方式。不論是什么樣的使用方式,命名空間都是一個非常有效的工具。
最后,我們需要注意的是,建議在程序設計時就盡量預設和規范命名空間的使用,以便代碼的更好維護和擴展。