php use 操作符閒話
阿新 • • 發佈:2019-02-05
use 操作符類似於 C++ 中的 using 語句。
在 PHP 中,use 操作符完成的工作稱之為取別名。具體可以分為:
- 為類名稱使用別名
- 為介面使用別名
- 為名稱空間名稱使用別名
- PHP 5.6開始允許匯入函式或常量或者為它們設定別名。
use 的用法並不難掌握,但這裡基於如下例子特別談兩點。
假如在全域性名稱空間有一個名為 Another 的類,請問就下面的程式碼而言,$obj1 和 $obj2 分別是例項化的是哪個類?
<?php
namespace foo;
$obj1 = new Another;
$obj2 = new \Another;
?>
答案是 $
而我剛開始基於自己 C++ 的基礎,認為 $obj1 例項化是全域性名稱空間中的 Another 類。但事實是 PHP 的名稱空間和 C++還是有區別的。
就上面的例子而言,一點是對類名的解析,一點就是全域性空間。
PHP 的全域性空間使用 \ 來表示,就是說如果我們要使用全域性名稱空間中的一個類,必須像 $obj2 那樣,使用 \ 來限定這個類;因為在 php 中例項化一個類時,如果這個類名不是完全限定的,比如上面的 new Another,PHP會基於當前名稱空間去解析這個類名,所以 $
最後很有意思的一點是,當我們在一個名稱空間中,呼叫全域性名稱空間中的函式時,如果該名稱空間中沒有同名函式,函式名並不需要使用前導 \ 對函式名進行限定。
<?php
namespace foo;
$r = func()
?>
比如上面的程式碼,PHP 會呼叫全域性名稱空間中的 func 函式,而不是呼叫 foo\func;當然如果 foo 名稱空間中定義了同名函式,這時如果還想呼叫全域性名稱空間中的 func 函式,還是需要使用前導 \ 對函式名進行限定的。