Composer作為PHP的包管理工具,為PHPer們提供了豐富的類庫,并且讓PHP重?zé)ㄐ律?,避免被時代淘汰的悲劇。可以說,Composer和PHP7是現(xiàn)在PHP開發(fā)者的標(biāo)配,如果你還沒用過Composer或者在PHP7的環(huán)境下工作,那么還真是有點落伍了哦!
這次的系列文章將一步步的解析Composer原理,不會去講解Composer的命令或者如何使用,這方面的內(nèi)容您可以穩(wěn)步Composer中文網(wǎng):https://www.phpcomposer.com/
<?php
$m = new TestClass();
$m->show();
function __autoload($className)
{
require $className . '.php';
}
學(xué)習(xí)編程,第一步一定是把代碼敲下來,請新建一個文檔叫作autoload.php,并把上面的代碼復(fù)制進(jìn)去。
然后在同級目錄新建一個TestClass.php文件,將以下代碼放入TestClass.php中:
<?php
class TestClass
{
public function show()
{
echo 'we are family!';
}
}
接下來,你可以通過網(wǎng)頁形式訪問autoload.php,或者我更推薦的直接在命令行運(yùn)行:php ./autoload.php
神奇的事情發(fā)生了,我們并沒有在autoload.php上方顯式的使用 require() 和 include 之類的函數(shù),而是在__autoload()中使用了 require $className . '.php'; 這段語句,就完成了TestClass.php文件的加載。
沒錯,我估計您也猜到了,__autoload()這個魔術(shù)方法的作用就是在調(diào)用的類如果沒有加載的情況下,就進(jìn)入到這個方法中。
嘗試加載未定義的類
__autoload( string $class ) : void
參數(shù)$class是沒有加載類的類名,也就是上方的TestClass
返回值是空
一般在函數(shù)內(nèi)部會根據(jù)$class去加載指定文件
這個方法在PHP7.2后會提示DEPRECATED,在未來的版本中可能會刪除。我們將再下一篇文章中講解的spl_autoload_register()函數(shù)將是自動加載的未來。使用自動加載函數(shù)的好處:不需要在文件頂部一大串的require。
嗯,已經(jīng)了解了__autoload()是干嘛的,但是這和Composer有什么關(guān)系?
別急,任何牛X的技術(shù)總有一個基礎(chǔ),沒有這個條件這項技術(shù)就很難實現(xiàn),就像人工智能,雖然早就有了各種算法和理論,但在大數(shù)據(jù)技術(shù)盛開之前總是無法落地。因為機(jī)器學(xué)習(xí)需要的大量數(shù)據(jù)如何存取實在是個難點。在這里,Composer就像是AI技術(shù),而__autoload()方法就是那個基石。
完整源碼:GitHub