国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【解惑】由namespace引發的關于加載的思考

yimo / 2944人閱讀

摘要:命名空間到底解決了什么問題在入了關鍵字以及魔術常量,命名空間的作用是為了解決重名問題。發現了腳本情況下只引入命名空間是找不到類的這個事實。可以有很多寫法和不同的用法,框架在此基礎上可以添加命名空間的映射,實現根據命名空間加載對應目錄的工作。

1.命名空間到底解決了什么問題?

PHP在5.3.0入了namespace關鍵字以及__NAMESPACE__魔術常量,命名空間的作用是為了解決重名問題。當然,這也是它唯一的作用了。

2.使用命名空間需要注意的點在哪?

你在當前文件下引入兩個名字相同,命名空間不同的類,你可以通過use命名空間時,as出來兩個別名的方式使類實例化的時候區分開使用。但你如果沒有引入這兩個類,僅僅use命名空間了,那么這兩個類是不能實例化的。
這里你可以簡單的測試一下,看看已有命名空間的情況下,引入類文件和沒有引入能否found到類文件。

3.我們使用ide(phpstorm)的時候,直接敲出來這個類,然后ide會use需要的類命名空間,似乎就完成類文件的引入了?

重點:命名空間并沒有做include/require文件的工作。
你要知道使用框架和沒有使用框架是不一樣的,框架會幫助你完成很多事。
相信你在第二步的時候。發現了php腳本情況下只引入命名空間是找不到類的這個事實。
so,回歸php本身,甭管你有沒有use這個類,當進程運行到需要使用到這個類的時候,php都會把它當做一個陌生的類。如果框架沒有幫助引入類的設計,那么就會直接報錯not found class了。

4.命名空間use在何時解析?

先上例子:

test.php

Print1();

namespace1.php

namespace my
ame;
class A {
        public function Print1(){
                echo 11;
        }
}

雖然require_once在use下面,也是可以正常運行的,因為程序只有在new mynameA()的時候才去加載命名空間myname,use相當于一種聲明。

5.有命名空間的類,框架怎么實現引入的工作呢?

此時有兩個函數可以幫到你,__autoload()和spl_autoload_register().

當你引用不存在的類時,__autoload()就會被調用,并且你的類名會被作為參數傳送過去(當你同時使用命名空間,包含命名空間部分會一起作為參數傳送)。

首先有一個類文件Aritst.class.php:

 

在你的index.php文件里有個全局函數,可以簡單的理解成這個樣子:

 function __autoload($classname){
     $classpath="./".$classname.".php";
     if(file_exists($classpath)){
     require_once($classpath);
     }
     else{
      echo "class file".$classpath."not found!";
     }
}

在index.php中去實例化Artist類

$obj = new Artist();
$obj->doThing();

運行index.php后正常輸出hello aritst!。
在index.php中,由于沒有包含Aritst.class.php,在實例化Aritst時,自動調用__autoload函數,參數$class的值即為類名Aritst,此時Aritst.class.php就被引進來了。

__autoload可以有很多寫法和不同的用法,php框架在此基礎上可以添加命名空間的映射,實現根據命名空間加載對應目錄的工作。

再看spl_autoload_register(),這個函數與__autoload有與曲同工之妙,當看個簡單的例子:

doPrint();
?>

它告訴PHP碰到沒有定義的類就執行autoRequire()。

6.composer內部的命名空間又是怎么維護的?

兄弟,引入幾個有現代php編碼風格的開發包,然后打開你的composer.json文件,認真的閱讀它,

"autoload": {
        "psr-4": {
            "App": "app/"
        }
    },
    

在這里,指明了命名空間和目錄結構映射的關系,如果你想個性化定制命名空間,可以在這里添加上,比如:

"autoload": {
    "psr-4": {
        "App": "app/",
        "Martistcn" : "app/martistcn"
    } 
},

運行composer命令:

composer dumpautoload

就會增加一條映射關系:

// vendor/composer/autoload_psr4.php
return array(
    "App" => array($baseDir . "/app"),
    / ***** /
    "Martistcn" => array($baseDir . "/app/martistcn"),
);    

so,有址可循。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23097.html

相關文章

  • 「Metaspace容量不足觸發CMS GC」從而引發思考

    摘要:第一個大陡坡是應用發布,老年代內存占比下降,很正常。但此時老年代內存使用占比。因為后期并不會引發。可以看出,由于到達時候,觸發了一次和一次。但觸發時,占比并沒用明顯的規律。得出,擴容導致這個說法,其實是不準確的。 轉載請注明原文鏈接:https://www.jianshu.com/p/468... 某天早上,毛老師在群里問「cat 上怎么看 gc」。 showImg(https://...

    StonePanda 評論0 收藏0
  • 一個問題引發關于對象和對象子類型思考

    摘要:答案核心對象和對象子類型先看一段解釋第一個代表對象。第二個代表對象子類型。那么問題來了,什么是不嚴謹的說,中的所有,都是由對象衍生出來的對象子類型包括,和。 問題:如題 var obj=new Object(); Object.prototype.toString.call(obj);// [object Object] var arr=new Array(); Object.pro...

    hatlonely 評論0 收藏0
  • 專治前端焦慮學習方案

    摘要:不過今天我希望能夠更進一步,不僅僅再抱怨現狀,而是從我個人的角度來給出一個逐步深入學習生態圈的方案。最后,我還是想提到下對于的好的學習方法就是回顧參照各種各樣的代碼庫,學習人家的用法與實踐。 本文翻譯自A-Study-Plan-To-Cure-JavaScript-Fatigue。筆者看到里面的幾張配圖著實漂亮,順手翻譯了一波。本文從屬于筆者的Web Frontend Introduc...

    codeGoogle 評論0 收藏0
  • 你所不知道HelloWorld背后原理

    摘要:今日最佳對于程序員而言,所謂的二八定律指的是花百分之八十的時間去學習日常研發中不常見的那百分之二十的原理。 【今日最佳】對于程序員而言,所謂的二八定律指的是 花百分之八十的時間去學習日常研發中不常見的那百分之二十的原理。 據說阿里某程序員對書法十分感興趣,退休后決定在這方面有所建樹。于是花重金購買了上等的文房四寶。 一日,飯后突生雅興,一番磨墨擬紙,并點上了上好的檀香,頗有王羲之風范,...

    lavor 評論0 收藏0
  • 文件導出亂碼引發對字符編碼思考

    摘要:參考的資料前輩們已經對字符編碼講的很好了,通俗易懂。字符編碼的誕生是人類對科學技術妥協的結果。字符編碼為什么有很多方式。這是從計算機層面總體上對字符編碼的認識。中的一些字符集字符編碼知識 以前在工作中遇到導出中文亂碼時,就google一下,看見把utf-8編碼換成GBK之類的編碼,導出在Excel中打開就不會亂碼了。只是解決了當前問題。對字符編碼沒有很好的認識。這次又遇到了,遂記錄之。...

    longmon 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<