首頁  >  文章  >  後端開發  >  php使用別名和導入

php使用別名和導入

伊谢尔伦
伊谢尔伦原創
2016-11-23 10:52:131284瀏覽

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

PHP 命名空間支援有兩種使用別名或匯入方式:為類別名稱使用別名,或為命名空間名稱使用別名。注意PHP不支援導入函數或常數。

在PHP中,別名是透過運算子 use 來實現的。以下是一個使用所有可能的三種導入方式的例子:

Example #1 使用use操作符導入/使用別名

<?php
    namespace foo;
    use My\Full\Classname as Another;
    // 下面的例子与 use My\Full\NSname as NSname 相同
    use My\Full\NSname;
    // 导入一个全局类
    use \ArrayObject;
    $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 对象
?>

注意對命名空間中的名稱(包含命名空間分隔符的完全限定名稱如 FooBar以及相對的不包含命名空間分隔符的全域名稱如 FooBar)來說,前導的反斜杠是不必要的也不允許有反斜杠,因為導入的名稱必須是完全限定的,不會根據當前的命名空間作相對解析。

為了簡化操作,PHP也支援在一行中使用多個use語句

Example #2 透過use運算子導入/使用別名,一行中包含多個use語句

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

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

Example #3 導入和動態名稱

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

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

Example #4 導入和完全限定名稱

<?php
    use My\Full\Classname as Another, My\Full\NSname;
    $obj = new Another; // 实例化My\Full\Classname类的对象 
    $obj = new \Another; // 实例化Another类的对象 
    $obj = new Another\thing; // 实例化My\Full\Classname\thing类的对象 
    $obj = new \Another\thing; // 实例化Another\thing类的对象 
?>


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