深入學習Composer原理(一) 完整源碼:GitHub

Composer作爲PHP的包管理工具,爲PHPer們提供了豐富的類庫,並且讓PHP重煥新生,避免被時代淘汰的悲劇。可以說,Composer和PHP7是現在PHP開發者的標配,如果你還沒用過Composer或者在PHP7的環境下工作,那麼還真是有點落伍了哦!

這次的系列文章將一步步的解析Composer原理,不會去講解Composer的命令或者如何使用,這方面的內容您可以穩步Composer中文網:https://www.phpcomposer.com/


第一篇主要了解一個簡單的函數:__autoload()魔術方法

<?php

$m = new TestClass();
$m->show();

function __autoload($className)
{
    require $className . '.php';
}

學習編程,第一步一定是把代碼敲下來,請新建一個文檔叫作autoload.php,並把上面的代碼複製進去。

然後在同級目錄新建一個TestClass.php文件,將以下代碼放入TestClass.php中:

<?php

class TestClass
{
    public function show()
    {
        echo 'we are family!';
    }
}

接下來,你可以通過網頁形式訪問autoload.php,或者我更推薦的直接在命令行運行:php ./autoload.php

神奇的事情發生了,我們並沒有在autoload.php上方顯式的使用 require()include 之類的函數,而是在__autoload()中使用了 require $className . '.php'; 這段語句,就完成了TestClass.php文件的加載。

沒錯,我估計您也猜到了,__autoload()這個魔術方法的作用就是在調用的類如果沒有加載的情況下,就進入到這個方法中。

在PHP官方文檔的解釋中是這樣定義的

嘗試加載未定義的類

函數格式

__autoload( string $class ) : void

  • 參數$class是沒有加載類的類名,也就是上方的TestClass
  • 返回值是空
  • 一般在函數內部會根據$class去加載指定文件

這個方法在PHP7.2後會提示DEPRECATED,在未來的版本中可能會刪除。我們將再下一篇文章中講解的spl_autoload_register()函數將是自動加載的未來。使用自動加載函數的好處:不需要在文件頂部一大串的require

嗯,已經瞭解了__autoload()是幹嘛的,但是這和Composer有什麼關係?

別急,任何牛X的技術總有一個基礎,沒有這個條件這項技術就很難實現,就像人工智能,雖然早就有了各種算法和理論,但在大數據技術盛開之前總是無法落地。因爲機器學習需要的大量數據如何存取實在是個難點。在這裏,Composer就像是AI技術,而__autoload()方法就是那個基石。

完整源碼:GitHub

關注公衆號:【硬核項目經理】獲取最新文章

添加微信/QQ好友:【xiaoyuezigonggong/149844827】免費得PHP、項目管理學習資料

知乎、公衆號、抖音、頭條搜索【硬核項目經理】

B站ID:482780532

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章