命名空間(namespaces)
* php5.3最大的新功能
* 完全支援名字空間特徵
* 大部分的功能的執行在編譯時
* 簡化命名慣例
1) 更清晰的**
不使用 namespaces
2) 使用 namespaces
3) 乙個檔案中多個名字空間
namespace lib;
class mysql {}
class sqlite {}
$b = new sqlite(;
namespace lib_extra;
class mscrypt {}
$a new mscrypt();
var_dump(
get_class($a),
get_class($b)
};// result:
// string(18) "lib_extra::mscrypt"
// string(11) "lib::sqlite"
4) 名字空間的層級
namespace foo;
function strlen($foo)
echo strlen("test"); // test
echo ::strlen("test") // 4
echo namespace::strlen("test"); // test
* function, class 和 constant 引用在乙個名字空間中首先指向這個名字空間, 其次才是乙個全域性的範圍
5) 名字空間 & 自動引入
function __autoload($var) // lib::foo
require "./ns.php";
/**<?php
namespace lib;
new foo();
?>
*/
* __autoload() 將處理為和名字空間的類名一起。
* autoload 僅在 class 不在名字空間和全域性範圍內存在時觸發。
* __autoload() 宣告在乙個名字空間中將不別呼叫!
6) 其他的名字空間的語法技巧namespace really::long::pointlessly::verbose::ns;
__namespace__; // 當前的名字空間名稱
class a {}
get_class( new a() ); // really::long::pointlessly::verbose::ns::abs
use really::long::pointlessly::verbose::ns::a as b; // 從乙個名字空間引用class
php5 3新特性之延遲靜態繫結
基於php版本 5.3.5 php5.3 以後引入了延遲靜態繫結 static 關鍵字 類似於 self 關鍵字 但它指向的是被呼叫的類 document 而不是包含類 domainobject static 和 self 的區別 主要的作用就是,彌補了原先的不足,原先子類可以用parent找到父類...
PHP 核心特性之命名空間
提出 在命名空間提出之前,不同的元件很容易碰到命名的衝突,例如 request response 等常見的命名。php 在 5.3 後提出了命名空間用來解決元件之間的命名衝突問題,主要參考了檔案系統的設計 同乙個目錄下不允許有相同的檔名 同乙個命名空間下不允許有相同的類 不同的目錄可以有同名檔案 不...
利用好PHP5 3的新特性,實現單例模式
5.3以前也可實現,但 較繁瑣,如下 class morder extends smodel 獲取本類單例的方法,公開 return morder public static function instance class class self handle new class return sel...