久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP關鍵特性之命名空間實例詳解

命名空間主要是為了解決代碼中類和函數可能存在沖突的問題。這篇文章給大家介紹php關鍵特性之命名空間,包括命名空間的定義等知識點,需要的朋友參考下吧

命名空間主要是為了解決代碼中類和函數可能存在沖突的問題,而這個特性其他語言一早就有,PHP則是姍姍來遲,它的出現催生了 PSR-4 的誕生,從而也催生了 Composer 的興起,所以是非常重要的特性。

命名空間的定義

命名空間是一個容器,這個容器主要是為了識別其下的類和函數。一旦定義了命名空間,它下面的代碼就屬于這個命名空間了,所以命名空間的定義要在代碼的最開始行。

對于同一個包來說,同一個命名空間或者子命名空間的代碼沒有必要在一個 PHP 文件中定義,子命名空間下的代碼是為了完成特定模塊的工作,組合起來就是一個包完整的命名空間。

假如編寫的代碼沒有定義命名空間,那說明它屬于全局的命名空間(\ 符號),所以能夠直接引用類或者函數(不用添加 \ 符號)。

引用命名空間標識符的三種方式

(1)Fully-qualified name

類似于操作系統上的絕對路徑,而且是完整的路徑,所以在理解的時候不會有誤解。

比如在 new \A\B\C ,那么 C 就被會解析到 A\B 命名空間下的 C 類。

(2)Qualified name

類似于操作系統上的相對路徑,它包含部分名字并被引用到當前的命名空間。

比如 B\C() 在命名空間 A 下調用,則最終引用的命名空間就是 A\B\C()。

(3)Unqualified name

類似于Qualified name,但是沒包括子命名空間。

比如 C() 在命名空間 A\B 下調用,則最終引用的命名空間就是 A\B\C()。

通過一個例子來說明三種引用方式:

namespace \Example;
require_once "fnction.php";
class ClassA {}
function Function() {}
//完全限定名稱
\Example\Function();
\Example\B\Function(); 
//限定名稱
B\Function(); //指向 \Example\B\Function();
//非限定名稱
$test = new ClassA(); //resolves to \Example\ClassA
Function(); //指向 \Example\Function

注意:

•Inside a namespace,假如在 current scope 沒有發現函數和常量的定義,PHP 不會報錯。而是去全局命名空間中尋找。

•Inside a namespace,假如在 current scope 沒有發現類的定義,則 PHP 會直接報錯,不會去全局域中找對應的類,所以假如你需要引用一個 internal 或用戶自定義的類,必須使用完全限定名稱。

先舉個簡單的例子,首先編寫一段代碼(定義在命名空間下),命名為 function.php :

namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo() 
{
  return "foo\r\n";
}
class foo 
{
  static function staticmethod()
  {
    return __METHOD__ . "\r\n" ;
  }
  function foofunction()
  {
    return __METHOD__ . "\r\n" ;
  }
}

再編寫一段代碼 test.php,也是處于命名空間之下的代碼:

namespace secondsp;
include 'function.php';
class foo
{
  function foofunction()
  {
    return __METHOD__ . "\r\n" ;
  }
}
function is_file($file)
{
  return true ;
}
//非限定名稱:實例化secondsp\foo類對象
$obj = new foo; 
echo $obj->foofunction();
//實例化Foo\Bar\subnamespace\foo 類對象
$obj = new Foo\Bar\subnamespace\foo ;
echo $obj->foofunction();
//代碼會報錯,在命名空間內部,假如無法找到當前命名空間下的類,則會報錯
//$obj = new ArrayObject(array(1)); 
$obj = new \ArrayObject(array(1)); 
//在命名空間內部,假如無法找到當前命名空間下的函數或者常量,則會尋找 native function
echo strlen("nihao");
 //引用當前命名空間下的函數
var_dump(is_file('nihao')); //True
//引用全局函數
var_dump(\is_file('nihao')); //False

導入,別名

假如要使用的命名空間層級很長且數量很多,那么在使用的時候特別麻煩,所以可以使用 use 關鍵字導入命名空間、類、常量、函數等,然后可以使用它們直接引用完整的名稱。而 alias 關鍵字可以給導入的類和函數等重命名。

舉個例子如何使用 use 關鍵字,該代碼處于全局命名空間之下:

include 'function.php';
use Foo\Bar\subnamespace\foo ;
$obj = new foo;
echo $obj->foofunction();
use Foo\Bar\subnamespace\foo as aliasfunname;
$obj = new aliasfunname;
echo $obj->foofunction();
use Foo\Bar\subnamespace ; 
$obj = new subnamespace\foo ;
echo $obj->foofunction();
use Foo\Bar\subnamespace as aliasname;
$obj = new aliasname\foo ;
echo $obj->foofunction();
//由于調用代碼并不在命名空間內,所以對于全局的類,無需引入使用
$obj = new ArrayObject(array(1)); 
//導入一個函數
use function Foo\Bar\subnamespace\foo  ;
echo foo();
use function Foo\Bar\subnamespace\foo as func;
echo func();
use const Foo\Bar\subnamespace\FOO;
//echo FOO;

總結:

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結合實例形式分析了php實現針對有序表插值查找的相關操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現服務端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現的多維數組排序算法,結合實例形式對比分析了php針對多維數組及帶有鍵名的多維數組進行排序相關操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結合ajaxuploadfile實現無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
主站蜘蛛池模板: 精品欧美一区二区三区久久久小说 | 亚洲手机视频在线 | 国产精品久久久久久久 | 男人的天堂中文字幕 | 久草精品视频 | 日韩手机在线看片 | 国产成人精品999在线观看 | 激情一区二区三区 | 日韩有码一区 | 精品网站999 | 99久久夜色精品国产亚洲96 | 中国人pornoxxx麻豆 | 国产精品乱码一区二区三区 | 一区二区在线 | 中文无码日韩欧 | 精品亚洲永久免费精品 | 亚洲国产成人精品女人久久久 | 欧美日本在线观看 | 成人在线播放网址 | 欧洲一区二区在线 | h片在线观看免费 | 拍戏被cao翻了h承欢 | 亚洲成av人片在线观看 | 亚洲成人中文字幕 | 国产视频在线观看一区二区三区 | 人人干人人干人人干 | 日本久草| 北条麻妃一区二区三区在线视频 | 在线免费观看黄色av | 欧美一区二区三区在线视频 | 欧美日韩在线视频一区 | 亚洲www啪成人一区二区麻豆 | 欧美一级免费看 | www久久爱 | 亚洲视频免费在线 | 国产精品视频500部 a久久 | 麻豆视频在线免费观看 | 一区二区精品 | 成人不卡| 久久黄色网 | 亚洲91精品 |