国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - Yii框架中使用PHPExcel的方法分析

Yii框架中使用PHPExcel的方法分析

2021-08-11 16:19zhaozhi406 PHP教程

這篇文章主要介紹了Yii框架中使用PHPExcel的方法,簡單分析了Yii使用PHPExcel的相關(guān)操作技巧與注意事項,并附帶說明了Yii的autoload機制,需要的朋友可以參考下

本文實例分析了Yii框架中使用PHPExcel的方法。分享給大家供大家參考,具體如下:

PHPExcel是一個比較好用的php讀取excel文件的類庫,今天遇到了在yii中如何加載PHPExcel類文件的問題,因為Yii的autoload機制是安裝類名去找文件,即文件名就是相應(yīng)的類名,而PHPExcel的類文件命名方式則是:dir_dir_classname.php,即文件名把文件的目錄名都記錄了,這種命名方式y(tǒng)ii肯定識別不了。怎么辦?

其實PHPExcel也有自己的autoload方法(PHPExcel_Autoloader::load() ),通過查看源碼發(fā)現(xiàn)它也是通過spl_autoload_register函數(shù)注冊的(在PHPExcel_Autoloader::register() 中),而我們知道PHP的autoload機制是,所有用spl_autoload_register函數(shù)注冊的方法,都會在autoload時被spl_autoload_call函數(shù)執(zhí)行一遍,因此我們只需要讓PHPExcel的autoload方法順利注冊上就行了。

如果了解Yii的autoload機制,不清楚的可以看 附錄 Yii的autoload機制 ,可以知道,只要設(shè)置Yii::$enableIncludePathfalse,第三方類庫就有了執(zhí)行自己的autoload方法的機會,然后使用下面兩行代碼就能加載PHPExcel的類了:

?
1
2
Yii::$enableIncludePath = false;
Yii::import('application.vendors.phpexcel.PHPExcel', 1);

import時采用了force include的方式,這是因為PHPExcel.php在被require時才會注冊autoloader,如果等到new PHPExcel時才注冊,其他的類例如PHPExcel_IOFactory如果在這之前使用了,就會出現(xiàn)找不到類的錯誤。

個人認為我的這種辦法是比較方便且優(yōu)雅的,對比網(wǎng)上的其他辦法好很多,下面列舉的辦法都或多或少有點問題,例如:

1、http://www.jfrwli.cn/article/182760.html,這種辦法先將Yii自己的autoloader unregister了,會造成yii自己的類加載不上

2、http://www.jfrwli.cn/article/182761.html,這種辦法還修改了PHPExcel的autoloader,代價很大。

附錄: Yii的autoload機制

Yii框架宣稱自己的類加載方式很高效,是真正的“用時加載”,那究竟特別在哪里?今天研究了一下源碼,發(fā)現(xiàn)其實是在代碼級加了一層“路徑緩存”。

我們知道,要實現(xiàn)自己的autoload方法,需要采用spl_autoload_register()函數(shù)注冊一個autoload方法,Yii注冊的這個方法是YiiBase::autoload(),稍后再講解這個方法的邏輯。另外,Yii一般都用Yii::import($pathAlias, $forceInclude=false)來加載相應(yīng)的類(這個方法直接調(diào)用了YiiBase::import() ),這個方法配合YiiBase::autoload()就能實現(xiàn)“用時加載”了。

先說import的大致邏輯:

1、檢查self::$_imports數(shù)組是否存在相應(yīng)的$pathAlias,如果有說明已經(jīng)加載過了,直接返回類名或者目錄名;否則繼續(xù)第2步;

2、根據(jù)路徑別名獲得實際的路徑名,并根據(jù)路徑別名最后一部分是否是“*”可以知道要加載的路徑別名是否是一個文件,如果是文件,去第3步;否則去第4步;

3、如果是$forceInclude是true,則立即require這個文件,并在$_imports數(shù)組中增加一項$alias => $className;否則在數(shù)組$classMap中緩存一項$className => $realPath

4、對于路徑,會在數(shù)組$_includePaths中緩存這個路徑,并且在$_imports數(shù)組中增加一項$alias => $realPath

5、結(jié)束。

因為$forceInclude默認都為false,所以import不會立即加載相應(yīng)的類,等到使用時才真正加載,這是YiiBase::autoload的工作。

autoload的大致邏輯:

1、檢查類名是否已緩存在$classMap或$_coreClasses數(shù)組中,如果是則直接require相應(yīng)的文件路徑,$_coreClasses是框架自有類的映射表;否則去第2步;

2、檢測YiiBase::$enableIncludePath是否為false,如果是則去第3步,否則直接include($className . '.php')

3、遍歷$includePaths數(shù)組,將目錄名拼接上類名,檢查是否為合法的php文件,如果是則include,然后跳出循環(huán)

4、結(jié)束。

需要注意的是,文檔指出:如果要與其他類庫一起使用,必須將$enableIncludePath置為false,以便在Yii::autoload()失敗時,其他類庫的autoload方法有機會執(zhí)行。

希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。

原文鏈接:https://blog.csdn.net/zhaozhi406/article/details/9325835

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 最新中文字幕视频 | 欧美性大战久久久 | 国产在线第一页 | 久久99精品久久久久婷婷暖91 | 色婷婷av一区二区三区大白胸 | 成人午夜精品一区二区三区 | 91国自产精品中文字幕亚洲 | 黑森林av凹凸导航 | 尤物视频在线观看 | 中文字幕在线观看视频地址二 | 亚洲免费在线 | 国产一区 | 国产精品99久久久久久久vr | 久青草视频 | 无码一区二区三区视频 | 亚洲精品一区二区网址 | 亚洲精品久久久久久久久久久 | 欧美在线a | 亚洲成人免费观看 | 精品国产一区二区三区久久久 | 国产精品18久久久久vr手机版特色 | 亚洲欧美一区二区三区久久 | 国产精品毛片久久久久久久 | 在线免费观看视频 | 日韩一区二区三区在线观看 | 一区二区日韩欧美 | 国产色在线观看 | 久久精品无码一区二区日韩av | 国产日韩精品视频 | 黄色在线免费 | 久久久一 | 欧美日韩a | 超碰人人干人人 | 日韩在线中文字幕 | 亚洲天堂网站 | av网站观看 | 日韩午夜电影 | 亚洲三区在线观看 | 天天干夜干| 亚洲综合中文 | 亚洲另类视频 |