理解命名空間首先要知道命名空間的作用,也就是它的出現解決了那些問題
官方給出的解決的問題是:
- 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
- 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。
可以看下這篇文章:https://blog.csdn.net/zhanghuiqi205/article/details/84671608
https://www.php.cn/php-weizijiaocheng-414933.html
從ThinkPHP5.0
開始,遵循PSR-4
自動加載規范,只需要給類庫正確定義所在的命名空間,並且命名空間的路徑與類庫文件的目錄一致,那么就可以實現類的自動加載,從而實現真正的惰性加載。
以phpmailer這個類庫為例,composer自動加載好該類庫,有用的文件都放在src這個目錄下
這些文件的命名空間都是這個:namespace PHPMailer\PHPMailer;
如果我們要使用PHPMailer這個類,需要use PHPMailer\PHPMailer\PHPMailer;所以文件名要和類名一致(但是如果一個文件里有多個類應該如何使用,所以在一個文件中盡量不要定義多個類)
命名空間與文件的路徑有時可能不一樣,這個就是,PHPMailer的類文件路徑是phpmailer\phpmailer\src\PHPMailer.php,命名空間卻是PHPMailer\PHPMailer,這是因為在composer加載時就對命名空間與路徑進行了綁定,如下圖:
thinkphp5 composer加載的類庫在vendor目錄下,自己下載的類庫放在extend目錄下,extend目錄下的類庫可以實現自動加載,