深刻學習Composer原理(一)

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

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


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

<?php

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

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

複製代碼

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

而後在同級目錄新建一個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文件的加載。composer

沒錯,我估計您也猜到了,__autoload()這個魔術方法的做用就是在調用的類若是沒有加載的狀況下,就進入到這個方法中。機器學習

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

嘗試加載未定義的類函數

函數格式

__autoload( string $class ) : void工具

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

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

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

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

完整源碼:GitHub

相關文章
相關標籤/搜索