首頁 >後端開發 >PHP問題 >php命名空間use關鍵字怎麼用

php命名空間use關鍵字怎麼用

青灯夜游
青灯夜游原創
2021-09-30 17:05:173760瀏覽

在php中,use關鍵字可以用來導入命名空間,語法“use namespace;”;也可用於導入函數和常數,並為它們設置別名,語法“use 命名空間as 別名;” 。

php命名空間use關鍵字怎麼用

本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦

什麼是命名空間?

從廣義來說,命名空間是一種封裝事物的方法,在許多地方都可以見到這個抽象概念。例如,在作業系統中目錄用來將相關檔案分組,而對於目錄中的檔案來說,它就扮演了命名空間的角色。

命名空間的定義

PHP 中命名空間(namespace)是在PHP5.3 中加入的,如果你了解C 的話,那命名空間就不算是什麼新事物了。不過命名空間在 PHP 當中還是相當重要的。

PHP 命名空間可以解決以下兩類問題:

  • 使用者寫的程式碼與PHP 內部的類別/函數/常數或第三方類別/函數/常數之間的命名衝突;

  • 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,以提高來源代碼的可讀性。

定義命名空間(使用關鍵字namespace)

#雖然任意合法的PHP 程式碼都可以包含在命名空間中,但只有類(包括抽象類別和traits)、介面、函數和常數等類型的程式碼受命名空間的影響。

命名空間的定義需要透過關鍵字namespace 來聲明,語法格式如下:

namespace 命名空间名;

【範例】下面我們來示範如何定義了命名空間:

<?php
    namespace MyProject;    // 定义名为 MyProject 的命名空间。
    const CONNECT_OK = 1;
    class Myclass {
        /* ... */
    }
    function Myfunc() {
        /* ... */
    }
?>

在聲明命名空間之前除了用於定義原始檔案編碼方式的declare 語句外,所有非PHP 程式碼(包括空白符號)都不能出現在命名空間聲明之前。

使用命名空間:別名/導入

#PHP 允許透過別名引用或匯入的方式來使用外部的命名空間,這是命名空間的一個重要特徵。這有點類似於在類別 unix 檔案系統中可以建立對其它的檔案或目錄的符號連接。

使用 use 關鍵字可以實現命名空間的導入,從 PHP5.6 開始允許導入函數和常數,並為它們設定別名。語法格式如下:

use namespace;

在 PHP 中,別名是透過運算元 use 與 as 來實現的,語法格式如下:

use 命名空间 as 别名;

【範例】使用 use 運算子匯入和使用別名。

<?php
    namespace foo;
    use My\Full\Classname as Another;
    // 下面的例子与 use My\Full\NSname as NSname 相同
    use My\Full\NSname;
    // 导入一个全局类
    use ArrayObject;
    // 导入一个函数
    use function My\Full\functionName;
    // 导入一个函数并定义别名
    use function My\Full\functionName as func;
    // 导入一个常量
    use const My\Full\CONSTANT;
    $obj = new namespace\Another;   // 实例化 foo\Another 对象
    $obj = new Another;             // 实例化 My\Full\Classname 对象
    NSname\subns\func();            // 调用 My\Full\NSname\subns\func 函数
    $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
                                    // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象
    func();                         // 调用 My\Full\functionName 函数
    echo CONSTANT;                  // 打印 My\Full\CONSTANT 常量
?>

注意:對命名空間中的名稱(包含命名空間分隔符的完全限定名稱,如Foo\Bar ,以及相對的不包含命名空間分隔符的全域名稱,如FooBar)來說,前導的反斜線是不必要的也是不建議的,因為導入的名稱必須是完全限定的,並且不會根據目前的命名空間進行相對解析。

為了簡化操作,PHP 還支援在一行中導入多個命名空間,中間使用,隔開,範例程式碼如下:

<?php
    use My\Full\Classname as Another, My\Full\NSname;
    $obj = new Another;     // 实例化 My\Full\Classname 对象
    NSname\subns\func();    // 调用 My\Full\NSname\subns\func 函数
?>

導入操作是編譯執行的,但動態的類名稱、函數名稱或常數名稱則不是。

<?php
    use My\Full\Classname as Another, My\Full\NSname;
    $obj = new Another; // 实例化一个 My\Full\Classname 对象
    $a = &#39;Another&#39;;
    $obj = new $a;      // 实际化一个 Another 对象
?>

另外,導入操作只影響非限定名稱和限定名稱。完全限定名稱由於是確定的,故不受導入的影響。

推薦學習:《PHP影片教學

以上是php命名空間use關鍵字怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn