【php】命名空间 和 自动加载的关系
生活随笔
收集整理的這篇文章主要介紹了
【php】命名空间 和 自动加载的关系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目的
本文的目的主要是說明 命名空間的 use 關鍵詞 和 new ClassName 這兩個步驟,哪個步驟才會執行自動加載,這是邏輯有點混亂的表現,這種想法也是很正常的,讓我們來解密吧
命名空間(namespace)
php從5.3加入了命名空間,我略懂一些java,所以命名空間還是比較好理解的,為什么需要命名空間啦?主要解決自己寫的內部類/函數/常量 ?和 第三方的類/函數/常量沖突
。引用命名空間下資源都要 使用關鍵字 use 標明 例如
require_once("apanly/BrowserDetector/Browser.php"); use?apanly\BrowserDetector\Browser; new?Browser();自動加載
php可以自定義自動加載函數,主要減少include 和 require 的使用。例如
function?myLoader($classname){$class_file?=?$classname?.?'.php';if?(?file_exists($class_file)?){require_once($class_file);}else{echo?"[?autoload?error?]".$class_file."?not?found";die(0);} } spl_autoload_register("myLoader");疑問
是 use 的時候 會執行 myLoader 自動記載函數 還是 new 一個對象的時候會執行自動加載函數?
答案是: new 一個對象的時候 會執行自動加載函數
示例演示
use 測試
<?php //根據class名字?找文件 function?myLoader($classname){$class_file?=?$classname?.?'.php';if?(?file_exists($class_file)?){require_once($class_file);}else{echo?"[?autoload?error?]".$class_file."?not?found";die(0);} }spl_autoload_register("myLoader");use?\apanly\test\test; new?test();沒有任何輸出
new 測試
<?php //根據class名字?找文件 function?myLoader($classname){$class_file?=?$classname?.?'.php';if?(?file_exists($class_file)?){require_once($class_file);}else{echo?"[?autoload?error?]".$class_file."?not?found";die(0);} }spl_autoload_register("myLoader");use?\apanly\test\test;輸出 :
[?autoload?error?]apanly\test\test.php?not?found結論
use 只是標明該使用那個命名空間,new 對象才是真真執行自動加載的觸發器。命名空間和自動加載沒有半毛錢關系
參考資料
【演示代碼】
原文地址:【php】命名空間 和 自動加載的關系
標簽:use ??autoload ??namespace ??
智能推薦
- 【No.2 Ionic】Android打包
- 【No.5 Ionic】修改 應用名,icon,啟動界面
- Composer : php依賴管理工具
- PSR : php編碼規范
- 【ionic】Mac IOS下真機調試
轉載于:https://blog.51cto.com/imguowei/1876561
總結
以上是生活随笔為你收集整理的【php】命名空间 和 自动加载的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp自定义标签库
- 下一篇: 网络计算模式与比较