日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP autoload实践

發(fā)布時(shí)間:2023/11/29 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP autoload实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文目的

本文簡要的描述了PHP提供的autoload機(jī)制,以及在scake中使用實(shí)踐。用于減少不必要的文件包含,提高php系統(tǒng)性能。

?

什么是__autoload

php是腳本語言,不同于c++只需要編譯一次,php每次執(zhí)行過程中都需要編譯,所以提高php編譯效率,可以提高php腳本執(zhí)行速度。

每次,當(dāng)你使用一個(gè)新的類時(shí),你需要包含這個(gè)類文件,然后在new出這個(gè)類。當(dāng)一個(gè)腳本中依賴了很多其他腳本中定義的類時(shí),往往腳本的樣子如下:

/** * 文件non_autoload.php */ require_once(‘your/proj/inc/A.php’); require_once(‘your/proj/inc/B.php’); require_once(‘your/proj/inc/C.php’); if (條件A) { $a = new A(); $b = new B(); $c = new C(); // … 業(yè)務(wù)邏輯 } else if (條件B) { $a = newA(); $b = new B(); // … 業(yè)務(wù)邏輯 }

這樣就會(huì)有一個(gè)問題:如果腳本執(zhí)行“條件B”這個(gè)分支時(shí),C.php這個(gè)文件其實(shí)沒有必要包含。因?yàn)?#xff0c;任何一個(gè)被包含的文件,無論是否使用,均會(huì)被php引擎編譯。如果不使用,卻被編譯,這樣可以被視作一種資源浪費(fèi)。更進(jìn)一步,如果C.php包含了D.php,D.php包含了E.php。并且大部分情況都執(zhí)行“條件B”分支,那么就會(huì)浪費(fèi)一部分資源去編譯C.php,D.php,E.php三個(gè)“無用”的文件。

這時(shí)候,可以通過PHP的__autoload方法去除這種浪費(fèi),__autoload方法提供一種“l(fā)azy load”的機(jī)制,當(dāng)第一次需要使用相關(guān)類時(shí)調(diào)用,這樣就不會(huì)加載不必要的類。還是通過上面的例子,修改如下:

/** * 文件autoload_demo.php */ function __autoload($className) { $filePath = “your/proj/inc/{$className}.php”; if (is_readable($filePath)) { require($filePath); } } if (條件A) { $a = new A(); $b = new B(); $c = new C(); // … 業(yè)務(wù)邏輯 } else if (條件B) { $a = newA(); $b = new B(); // … 業(yè)務(wù)邏輯 }

可以看到,文件開頭去掉了連串的require方法,使用了php的魔術(shù)方法__autoload替代。該函數(shù)的工作原理如下:

當(dāng)php引擎第一次使用類A,但是找不到時(shí),會(huì)自動(dòng)調(diào)用__autoload方法,并將類名“A”作為參數(shù)傳入。所以,我們需要的做的就是根據(jù)類名,找到對應(yīng)的文件,并包含進(jìn)來,如果我們的方法也找不到,那么php引擎就會(huì)報(bào)錯(cuò)。注意,這里可以只用require,因?yàn)橐坏┌M(jìn)來后,php引擎再遇到類A時(shí),將不會(huì)調(diào)用__autoload,而是直接使用內(nèi)存中的類A,不會(huì)導(dǎo)致多次包含。

所以,使用__autoload的關(guān)鍵在于,如何根據(jù)類名,找到對應(yīng)類定義的文件。

?

參考資料

  • Why you should use an autoload function in php
  • Php autoload best practice
  • Autoloadin and the psr 0 standard

總結(jié)

以上是生活随笔為你收集整理的PHP autoload实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。