摘要:命名空間到底解決了什么問(wèn)題在入了關(guān)鍵字以及魔術(shù)常量,命名空間的作用是為了解決重名問(wèn)題。發(fā)現(xiàn)了腳本情況下只引入命名空間是找不到類的這個(gè)事實(shí)??梢杂泻芏鄬懛ê筒煌挠梅ǎ蚣茉诖嘶A(chǔ)上可以添加命名空間的映射,實(shí)現(xiàn)根據(jù)命名空間加載對(duì)應(yīng)目錄的工作。
1.命名空間到底解決了什么問(wèn)題?
PHP在5.3.0入了namespace關(guān)鍵字以及__NAMESPACE__魔術(shù)常量,命名空間的作用是為了解決重名問(wèn)題。當(dāng)然,這也是它唯一的作用了。
2.使用命名空間需要注意的點(diǎn)在哪?你在當(dāng)前文件下引入兩個(gè)名字相同,命名空間不同的類,你可以通過(guò)use命名空間時(shí),as出來(lái)兩個(gè)別名的方式使類實(shí)例化的時(shí)候區(qū)分開使用。但你如果沒(méi)有引入這兩個(gè)類,僅僅use命名空間了,那么這兩個(gè)類是不能實(shí)例化的。
這里你可以簡(jiǎn)單的測(cè)試一下,看看已有命名空間的情況下,引入類文件和沒(méi)有引入能否found到類文件。
重點(diǎn):命名空間并沒(méi)有做include/require文件的工作。
你要知道使用框架和沒(méi)有使用框架是不一樣的,框架會(huì)幫助你完成很多事。
相信你在第二步的時(shí)候。發(fā)現(xiàn)了php腳本情況下只引入命名空間是找不到類的這個(gè)事實(shí)。
so,回歸php本身,甭管你有沒(méi)有use這個(gè)類,當(dāng)進(jìn)程運(yùn)行到需要使用到這個(gè)類的時(shí)候,php都會(huì)把它當(dāng)做一個(gè)陌生的類。如果框架沒(méi)有幫助引入類的設(shè)計(jì),那么就會(huì)直接報(bào)錯(cuò)not found class了。
先上例子:
test.php
Print1();
namespace1.php
namespace my ame; class A { public function Print1(){ echo 11; } }
雖然require_once在use下面,也是可以正常運(yùn)行的,因?yàn)槌绦蛑挥性趎ew mynameA()的時(shí)候才去加載命名空間myname,use相當(dāng)于一種聲明。
5.有命名空間的類,框架怎么實(shí)現(xiàn)引入的工作呢?此時(shí)有兩個(gè)函數(shù)可以幫到你,__autoload()和spl_autoload_register().
當(dāng)你引用不存在的類時(shí),__autoload()就會(huì)被調(diào)用,并且你的類名會(huì)被作為參數(shù)傳送過(guò)去(當(dāng)你同時(shí)使用命名空間,包含命名空間部分會(huì)一起作為參數(shù)傳送)。
首先有一個(gè)類文件Aritst.class.php:
在你的index.php文件里有個(gè)全局函數(shù),可以簡(jiǎn)單的理解成這個(gè)樣子:
function __autoload($classname){ $classpath="./".$classname.".php"; if(file_exists($classpath)){ require_once($classpath); } else{ echo "class file".$classpath."not found!"; } }
在index.php中去實(shí)例化Artist類
$obj = new Artist(); $obj->doThing();
運(yùn)行index.php后正常輸出hello aritst!。
在index.php中,由于沒(méi)有包含Aritst.class.php,在實(shí)例化Aritst時(shí),自動(dòng)調(diào)用__autoload函數(shù),參數(shù)$class的值即為類名Aritst,此時(shí)Aritst.class.php就被引進(jìn)來(lái)了。
__autoload可以有很多寫法和不同的用法,php框架在此基礎(chǔ)上可以添加命名空間的映射,實(shí)現(xiàn)根據(jù)命名空間加載對(duì)應(yīng)目錄的工作。
再看spl_autoload_register(),這個(gè)函數(shù)與__autoload有與曲同工之妙,當(dāng)看個(gè)簡(jiǎn)單的例子:
function autoRequire( $class ) { $file = $class . ".class.php"; if (is_file($file)) { require_once($file); } } spl_autoload_register( "autoRequire" ); $obj = new PRINTIT(); $obj->doPrint(); ?>
它告訴PHP碰到?jīng)]有定義的類就執(zhí)行autoRequire()。
6.composer內(nèi)部的命名空間又是怎么維護(hù)的?兄弟,引入幾個(gè)有現(xiàn)代php編碼風(fēng)格的開發(fā)包,然后打開你的composer.json文件,認(rèn)真的閱讀它,
"autoload": { "psr-4": { "App": "app/" } },
在這里,指明了命名空間和目錄結(jié)構(gòu)映射的關(guān)系,如果你想個(gè)性化定制命名空間,可以在這里添加上,比如:
"autoload": { "psr-4": { "App": "app/", "Martistcn" : "app/martistcn" } },
運(yùn)行composer命令:
composer dumpautoload
就會(huì)增加一條映射關(guān)系:
// vendor/composer/autoload_psr4.php return array( "App" => array($baseDir . "/app"), / ***** / "Martistcn" => array($baseDir . "/app/martistcn"), );
so,有址可循。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23097.html
摘要:第一個(gè)大陡坡是應(yīng)用發(fā)布,老年代內(nèi)存占比下降,很正常。但此時(shí)老年代內(nèi)存使用占比。因?yàn)楹笃诓⒉粫?huì)引發(fā)??梢钥闯?,由于到達(dá)時(shí)候,觸發(fā)了一次和一次。但觸發(fā)時(shí),占比并沒(méi)用明顯的規(guī)律。得出,擴(kuò)容導(dǎo)致這個(gè)說(shuō)法,其實(shí)是不準(zhǔn)確的。 轉(zhuǎn)載請(qǐng)注明原文鏈接:https://www.jianshu.com/p/468... 某天早上,毛老師在群里問(wèn)「cat 上怎么看 gc」。 showImg(https://...
摘要:答案核心對(duì)象和對(duì)象子類型先看一段解釋第一個(gè)代表對(duì)象。第二個(gè)代表對(duì)象子類型。那么問(wèn)題來(lái)了,什么是不嚴(yán)謹(jǐn)?shù)恼f(shuō),中的所有,都是由對(duì)象衍生出來(lái)的對(duì)象子類型包括,和。 問(wèn)題:如題 var obj=new Object(); Object.prototype.toString.call(obj);// [object Object] var arr=new Array(); Object.pro...
摘要:不過(guò)今天我希望能夠更進(jìn)一步,不僅僅再抱怨現(xiàn)狀,而是從我個(gè)人的角度來(lái)給出一個(gè)逐步深入學(xué)習(xí)生態(tài)圈的方案。最后,我還是想提到下對(duì)于的好的學(xué)習(xí)方法就是回顧參照各種各樣的代碼庫(kù),學(xué)習(xí)人家的用法與實(shí)踐。 本文翻譯自A-Study-Plan-To-Cure-JavaScript-Fatigue。筆者看到里面的幾張配圖著實(shí)漂亮,順手翻譯了一波。本文從屬于筆者的Web Frontend Introduc...
摘要:今日最佳對(duì)于程序員而言,所謂的二八定律指的是花百分之八十的時(shí)間去學(xué)習(xí)日常研發(fā)中不常見的那百分之二十的原理。 【今日最佳】對(duì)于程序員而言,所謂的二八定律指的是 花百分之八十的時(shí)間去學(xué)習(xí)日常研發(fā)中不常見的那百分之二十的原理。 據(jù)說(shuō)阿里某程序員對(duì)書法十分感興趣,退休后決定在這方面有所建樹。于是花重金購(gòu)買了上等的文房四寶。 一日,飯后突生雅興,一番磨墨擬紙,并點(diǎn)上了上好的檀香,頗有王羲之風(fēng)范,...
摘要:參考的資料前輩們已經(jīng)對(duì)字符編碼講的很好了,通俗易懂。字符編碼的誕生是人類對(duì)科學(xué)技術(shù)妥協(xié)的結(jié)果。字符編碼為什么有很多方式。這是從計(jì)算機(jī)層面總體上對(duì)字符編碼的認(rèn)識(shí)。中的一些字符集字符編碼知識(shí) 以前在工作中遇到導(dǎo)出中文亂碼時(shí),就google一下,看見把utf-8編碼換成GBK之類的編碼,導(dǎo)出在Excel中打開就不會(huì)亂碼了。只是解決了當(dāng)前問(wèn)題。對(duì)字符編碼沒(méi)有很好的認(rèn)識(shí)。這次又遇到了,遂記錄之。...
閱讀 695·2021-11-18 10:07
閱讀 2886·2021-09-22 16:04
閱讀 888·2021-08-16 10:50
閱讀 3360·2019-08-30 15:56
閱讀 1793·2019-08-29 13:22
閱讀 2700·2019-08-26 17:15
閱讀 1247·2019-08-26 10:57
閱讀 1116·2019-08-23 15:23