PHP命名空間及自動載入

2022-09-01 03:06:09 字數 1551 閱讀 9057

什麼是命名空間呢?

命名空間(英語:namespace)表示識別符號(identifier)的可見範圍。乙個識別符號可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。這樣,在乙個新的命名空間中可定義任何識別符號,它們不會與任何已有的識別符號發生衝突,因為已有的定義都處於其它命名空間中。

簡單說來命名空間是為了解決不同庫在同乙個環境下使用時出現的命名衝突。例如我自己有乙個函式名叫a,但是系統已經有乙個a函式了,那就會出現衝突。

php從5.3版本開始引入了命名空間,之後許多現有php類庫以及框架都開始支援它。那麼php的命名空間怎麼用呢?

下面是乙個定義命名空間的例子

<?php    

//file a.php

namespace a;

const test = 'atest';

function test()

class test

}?>

上面例子中就是乙個典型的命名空間定義方法,只有const,function,class受命名空間的約束。

使用命名空間的方式如下:

<?php 

namespace b;

use a;

const test = 'btest';

function test()

class test

}include "a.php";//必須包含a命名空間的檔案

// 完全限定

// `\b\test`從絕對位置查詢輸出,如果是全域性函式則`\test`

echo \b\test; //輸出btest

// 限定名稱

// 這裡已經通過`use a`申明了在這個檔案可以通過`\a\...`使用a命名空間的函式

echo a\test; //輸出atest

// 非限定名稱

// 非限定名稱的函式`test`會從當前命名控制項查詢,即b

echo test; //輸出btest

// namespace關鍵字代表當前命名空間

echo namespace\test;

?>

首先要注意的是命名空間只起申明作用,也就是在使用了命名空間的時候依然得把這個命名空間申明的那個檔案包含進來。在使用中可以通過__namespace__來檢視當前命名空間。

每個檔案既要申明命名控制項又要手動include是非常不智慧型的事情,所以在自己的php系統或者框架中可以使用自動載入技術,讓系統自己去找

最簡單的方式是利用函式__autoload函式,但是這個函式只能在非命名控制項下定義,也就是全域性情況下:

function __autoload($class)

如果在已經有了命名空間的類中,可以使用函式spl_autoload_register來註冊乙個類中的方法來代替__autoload

php命名空間namespace自動載入

php的命名空間僅僅提供了乙個邏輯上的類的隔離空間,我們在引用類時,仍要自己實現自動載入。思路就是使用乙個未引入的類時,php自動觸發spl autoload register這個方法,然後就會根據命名空間的結構解析為檔案路徑,引入相關的類檔案啦。下面僅僅編寫乙個簡單的自動載入方法。1 優先使用cl...

php 命名空間和自動載入

命名空間 namespace class function get class model class get 使用命名空間的get 函式use class model 使用命名空間的model類當某個類被例項化使用時,autoload函式會自動載入該類,並用引數接收類的命名空間和類名 functi...

PHP 命名空間和自動載入

php5.3 之後引入了命名空間的特性,從本質上講,命名空間就是乙個容器,你可以將類 函式和變數放在其中,在命名空間中,你可以無條件地訪問這些項,在命名空間之外,必須匯入或引用命名空間,才能訪問它所包含的項。namespace my require one outputter3.php class ...