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

PHP命令空間namespace及use的用法小結

命名空間一個最明確的目的就是解決重名問題,PHP中不允許兩個函數或者類出現相同的名字,否則會產生一個致命的錯誤。這篇文章主要介紹了PHP命令空間namespace及use的用法實踐總結,需

命名空間一個最明確的目的就是解決重名問題,PHP中不允許兩個函數或者類出現相同的名字,否則會產生一個致命的錯誤。這種情況下只要避免命名重復就可以解決,最常見的一種做法是約定一個前綴。

使用namespace的目的:

團隊合作項目時,避免與團隊其它成員新建的類發生沖突;個人負責項目時,避免前后新建的類發生沖突;

據個人理解,用到所需要的類時,需要先require或include引入,所以會發生類重定義的錯誤的前提是:兩個相同命名的類都有被引入。目前有些php框架會自動加載(即include)所有新建的model類,所以為了避免你新建的model類和項目框架原生的核心類發生重名沖突,采用了namespace。(想了想,與團隊成員新建的類產生沖突應該通過溝通避免,即使事發后也應該重新調整類名即時維護,避免后期造成因為對類的理解混淆而帶來維護上的復雜度提高)

結合使用方法來進一步理解它的使用目的吧。

namespace的使用方法:

為了進行測試,我將創建3個文件:1.php和name.php(此文件用來執行測試),后面將不再說明,請自行注意代碼的變化。

1.namespace后命名的定義不區分大小寫

namespace one;
namespace One;
namespace ONE;

如上寫法都可以,選擇一種作為自己的規范即可。(后面代碼我采用第一種進行測試哈)

2. 沒有定義命名空間,就理解為使用頂級命名空間。new類時,可以在類前加上反斜杠\,也可以不加。

//1.php 
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
require_once './1.php';
new Person(); //輸出 I am one!;
new \Person(); //輸出 I am one!; 

3. new類時,帶上命名空間時,之間一定用反斜杠字符,而不是順斜杠。

記憶方法:按找%中斜杠的順序理解為順斜杠。(有時說反斜杠,自己都不知道是哪種方向,以前按自左向右上升方向這種方向記憶,現在感覺這個太不靠譜了)

//name.php
require_once './1.php';
new /Person(); // 代碼報錯:Parse error: syntax error, unexpected '/'

4.類在指定命名空間下, new類時,一定要帶上指定的命名空間。

沒有帶上指定的命名空間,按照第2點,php就會從頂級命名空間里找這個類。切記:這里不能按照頂級命名空間包含一切其它的命名空間來理解。而應該將頂級命名空間完完全全與其他命名空間區分開。

//1.php 
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
require_once './1.php';
new \one\Person(); //輸出 I am one!;
new \Person(); //代碼報錯:Fatal error: Class 'Person' not found

可以舉個這個通俗例子來理解:帶上指定命名空間代表某人的蘋果(在他手里),頂級命名空間代表蘋果箱里的蘋果(在箱子里)。現在要找某人的蘋果,就將某人的命名空間帶上,否則就會從箱子里找某人的蘋果,結果當然是找不到。

5.命名空間聲明后的代碼便屬于這個命名空間,即使有include或require也不影響(重點是對后半句的理解,具體看代碼)。

//1.php 
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
namespace test;
require './1.php'; 
new \one\Person(); //輸出 I am one!;
new Person(); //這里結果會是什么呢,猜猜看

最后一行結果報錯:

Fatal error: Class 'test\Person' not found

首先,這里與第2點比較一下:

第2點,我說,沒有命名空間時,new類時,有沒有反斜杠意義一樣。

在這里,有了命名空間,有和沒有反斜杠的意義就不一樣了。

最后一行換成

new \Person(); 

結果報錯:

Fatal error: Class 'Person' not found

接著,就說說當前這點。

我們可以發現,最后一行代碼對應的命名空間為test,并沒有受到require文件里的命名空間的影響。

進一步加強驗證,我修改了name.php文件如下:

//name.php
namespace test;
require './1.php'; 
class Person{
 function __construct(){
  echo 'I am test!';
 }
}
new \one\Person(); //輸出 I am one!;
new Person(); //這里結果會是什么,自己猜猜看 

最后,這個例子刷新了我對require的認識了。

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

相關文檔推薦

這篇文章主要介紹了PHP定義字符串的四種方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
下面小編就為大家分享一篇php 替換文章中的圖片路徑,下載圖片到本地服務器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP給源代碼加密的幾種方法匯總(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇php打開本地exe程序,js打開本地exe應用程序,并傳遞相關參數方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP類的反射來實現依賴注入過程以及相關知識點分享,對此有興趣的朋友跟著小編學習下吧。
php遍歷一個文件夾內的所有文件和文件夾,并刪除所有文件夾和子文件夾下的所有文件的代碼,通過遞歸方式實現達到清空一個目錄的效果。本文給大家分享實例代碼,需要的朋友參考
主站蜘蛛池模板: 久久精品亚洲精品国产欧美 | 欧美精品一区二区三区在线 | 中文字幕一区在线 | 亚洲一区二区三区视频 | 欧美亚洲一区二区三区 | 一级黄色片一级黄色片 | 天堂av影院 | 亚洲欧美视频一区二区 | 男女视频在线免费观看 | 精品啪啪 | 中文字幕日韩欧美一区二区三区 | 久草中文在线 | 欧美另类视频 | 中文字幕韩在线第一页 | 成人在线一区二区 | 亚州av| 97超碰人人| 日韩中文字幕高清 | 国产中文字幕网 | 天天草视频 | av中文字幕网站 | 精品国产一区二区三区观看不卡 | 久久亚| 久久亚洲欧美日韩精品专区 | 精品免费国产一区二区三区四区介绍 | 亚洲精品v日韩精品 | 亚洲男女激情 | 亚洲精品aⅴ | 日韩av中文 | 亚洲区一区二区 | 国产日韩久久 | 在线观看中文字幕 | 亚洲天天干 | 毛片久久久 | 亚洲综合99 | 久久久久久久久国产成人免费 | 农村妇女毛片精品久久久 | 亚洲福利在线观看 | 影音av | 人人九九精 | 在线一区视频 |