真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用PHP怎么實現(xiàn)一個懶加載方法-創(chuàng)新互聯(lián)

使用PHP怎么實現(xiàn)一個懶加載方法?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

成都創(chuàng)新互聯(lián)公司主營孝感網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,孝感h5小程序制作搭建,孝感網(wǎng)站營銷推廣歡迎孝感等地區(qū)企業(yè)咨詢

通過PHP的反射類 ReflectionClass 可以直接獲得對應(yīng)類的一個反射類:


test.php文件如下:


index.php文件如下:


newInstance();
$testObj->showName();
function __autoload($classname){
  $classpath = './' . $classname . '.php';
  if (file_exists($classpath)) {
    require_once($classpath);
  }else {
    echo 'class file'.$classpath.'not found!';
  }
}
?>
//array
// 0 => string 'D:\code\www\test\index.php'(length=26)
//array
// 0 => string 'D:\code\www\test\index.php'(length=26)
// 1 => string 'D:\code\www\text\test.php'(length=25)
//string 'test' (length=4)

實例化一個 ReflectionClass,并傳類名進去,就會得到一個對應(yīng)類的反射類。用實例調(diào)用 newInstance就會得到反射類的實例,這樣就完成了實例化。

通過 get_included_files() 方法,我們可以看到當(dāng)前頁面引入的文件。在實例化反射類前,只有index.php文件,實例化反射類后,自動引入了一個test.php文件,那么看下上面那段代碼,發(fā)現(xiàn)有個__autoload()名字的魔術(shù)方法,這方法就定義了自動加載文件,而ReflectionClass在當(dāng)前頁面找不到類時,就會調(diào)用__autoload()去加載類。這就是自動加載的過程。

想知道__autoload()方法有沒有開啟,可以通過PHP的標(biāo)準庫SPL中的方法來查看:

var_dump(spl_autoload_functions());
spl_autoload_register('newAutoload');
var_dump(spl_autoload_functions());
$testObj1 = getInstance('test');
$testObj2 = getInstance('test');
$testObj3 = getInstance('test');
function getInstance($class, $returnInstance = false){
  $rf = new ReflectionClass($class);
  if ($returnInstance)
     return $rf->newInstance();
}
function newAutoload($classname){
  $classpath = './' . $classname . '.php';
  if (file_exists($classpath)) {
    var_dump('require success');
    require_once($classpath);
  } else {
    echo 'class file ' . $classpath . ' not found!';
  }
}
//array
// 0 => string '__autoload' (length=10)
//array
// 0 => string 'newAutoload' (length=11)
//string 'require success' (length=15)

sql_autoload_functions() 方法是用來查看當(dāng)前自動加載的方法,當(dāng)前有個__autoload魔術(shù)方法,所以返回了函數(shù)名,若沒定義自動加載方法的話,返回的是false,而 spl_autoload_register() 方法是通過方法名將一個方法注冊到自動加載方法,這里用newAutoload方法來替換__autoload方法。

newAutoload方法中,每執(zhí)行成功一次,打印一句'require success',這里只打印了一次,說明了雖然實例了3次ReflectionClass('test'),但因為test類已經(jīng)加載過一次,就不會再執(zhí)行自動加載的方法。通過getInstance()這種加載類的方法,比以前的include()之類的方便多了,只需要加載這個寫了getInstance()方法的文件就可以了。

重寫的自動加載方法可以根據(jù)需要,通過判斷類的名字,定義不同的文件路徑。getInstance可以用靜態(tài)變量保存實例,這也是使用到了設(shè)計模式中的單例模式。

關(guān)于使用PHP怎么實現(xiàn)一個懶加載方法問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


網(wǎng)頁題目:使用PHP怎么實現(xiàn)一個懶加載方法-創(chuàng)新互聯(lián)
標(biāo)題URL:http://weahome.cn/article/hdegi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部