亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP SPL應用淺析

2020-03-22 18:56:50
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP SPL應用,結合實例形式分析了SPL非常重要卻又不為人所熟知的功能與相關操作技巧,需要的朋友可以參考下

本文實例講述了PHP SPL應用方法。分享給大家供大家參考,具體如下:

Rafael Dohms 上面的篇文章 讓我為之驚艷,忍不住就翻譯了下來,同時補充了部分內容。

SPL,PHP 標準庫(Standard PHP Library) ,從 PHP 5.0 起內置的組件和接口,并且從 PHP5.3 已逐漸的成熟。SPL 其實在所有的 PHP5 開發環境中被內置,同時無需任何設置。

似乎眾多的 PHP 開發人員基本沒有使用它,甚至聞所未聞。究其原因,可以追述到它那陽春白雪般的說明文檔,使你忽略了「它的存在」。SPL 這塊寶石猶如鐵達尼的「海洋之心」般,被沉入海底。而現在它應該被我們撈起,并將它穿戴在應有的位置 ,而這也是這篇文章所要表述的觀點。

那么,SPL 提供了什么?

SPL 對 PHP 引擎進行了擴展,例如 ArrayAccess、Countable 和 SeekableIterator 等接口,它們用于以數組形式操作對象。同時,你還可以使用 RecursiveIterator、ArrayObejcts 等其他迭代器進行數據的迭代操作。

它還內置幾個的對象例如 Exceptions、SplObserver、Spltorage 以及 splautoloadregister、splhtml' target='_blank'>classes、iteratorapply 等的幫助函數(helper functions),用于重載對應的功能。

這些工具聚合在一起就好比是把多功能的瑞士軍刀,善用它們可以從質上提升 PHP 的代碼效率。那么,我們如何發揮它的威力?

重載 autoloader

如果你是位「教科書式的程序員」,那么你保證了解如何使用 __autoload 去代替 includes/requires 操作惰性載入對應的類,對不?

但久之,你會發現你已經陷入了困境,首先是你要保證你的類文件必須在指定的文件路徑中,例如在 Zend 框架中你必須使用「_」來分割類、方法名稱(你如何解決這一問題?)。

另外的一個問題,就是當項目變得越來越復雜, __autoload 內的邏輯也會變得相應的復雜。到最后,甚至你會加入異常判斷,以及將所有的載入類的邏輯如數寫到其中。

大家都知道「雞蛋不能放到一個籃子中」,利用 SPL 可以分離 __autoload 的載入邏輯。只需要寫個你自己的 autoload 函數,然后利用 SPL 提供的函數重載它。

例如上述 Zend 框架的問題,你可以重載 Zend loader 對應的方法,如果它沒有找到對應的類,那么就使用你先前定義的函數。


<?phpclass MyLoader {  public static function doAutoload($class) {    // 本模塊對應的 autoload 操作  }}spl_autoload_register( array('MyLoader', 'doAutoload') );?>


正如你所見, spl_autoload_register 還能以數組的形式加入多個載入邏輯。同時,你還可以利用spl_autoload_unregister 移除已經不再需要的載入邏輯,這功能總會用到的。

迭代器

迭代是常見設計模式之一,普遍應用于一組數據中的統一的遍歷操作??梢院敛豢鋸埖恼f,SPL 提供了所有你需要的對應數據類型的迭代器。

有個非常好的案例就是遍歷目錄。常規的做法就是使用 scandir ,然后跳過「.「 和 「..」,以及其它未滿足條件的文件。例如你需要遍歷個某個目錄抽取其中的圖片文件,就需要判斷是否是 jpg、gif 結尾。

下面的代碼就是使用 SPL 的迭代器執行上述遞歸尋找指定目錄中的圖片文件的例子:


<?phpclass RecursiveFileFilterIterator extends FilterIterator {  // 滿足條件的擴展名  protected $ext = array('jpg','gif');  /**   * 提供 $path 并生成對應的目錄迭代器   */  public function __construct($path) {    parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));  }  /**   * 檢查文件擴展名是否滿足條件   */  public function accept() {    $item = $this->getInnerIterator();    if ($item->isFile() &&        in_array(pathinfo($item->getFilename(), PATHINFO_EXTENSION), $this->ext)) {      return TRUE;    }  }}// 實例化foreach (new RecursiveFileFilterIterator('/path/to/something') as $item) {  echo $item . PHP_EOL;}?>


你可能會說,這不是花了更多的代碼去辦同一件事情嗎?那么,查看上面的代碼,你不是擁有了具有高度重用而且可以測試的代碼了嗎 :)

下面是 SPL 提供的其他的迭代器:

RecursiveIterator
RecursiveIteratorIterator
OuterIterator
IteratorIterator
FilterIterator
RecursiveFilterIterator
ParentIterator
SeekableIterator
LimitIterator
GlobIterator
CachingIterator
RecursiveCachingIterator
NoRewindIterator
AppendIterator
RecursiveIteratorIterator
InfiniteIterator
RegexIterator
RecursiveRegexIterator
EmptyIterator
RecursiveTreeIterator
ArrayIterator

自 PHP5.3 開始,會內置其他更多的迭代器,我想你都可以嘗試下,或許它能改變你編寫傳統代碼的習慣。

SplFixedArray

SPL 還內置了一系列的數組操作工具,例如可以使用 SplFixedArray 實例化一個固定長度的數組。那么為什么要使用它?因為它更快,甚至它關系著你的工資問題 :)

我們知道 PHP 常規的數組包含不同類型的鍵,例如數字、字符串等,并且長度是可變的。正是因為這些「高級功能」,PHP 以散列(hash)的方式通過鍵得到對應的值 -- 其實這在特定情況這會造成性能問題。

而 SplFixedArray 因為是使用固定的數字鍵,所以它并沒有使用散列存儲方式。不確切的說,甚至你可以認為它就是個 C 數組。這就是為什么 SplFixedArray 會比通常數組要快的原因(僅在 PHP5.3 中)。

那到底有多快呢,下面的組數據可以讓你窺其究竟。

如果你需要大量的數組操作,那么你可以嘗試下,相信它是值得信賴的。

數據結構

同時 SPL 還提供了些數據結構基本類型的實現 。雖然我們可以使用傳統的變量類型來描述數據結構,例如用數組來描述堆棧(Strack)-- 然后使用對應的方式 pop 和 push(arraypop()、arraypush()),但你得時刻小心,·因為畢竟它們不是專門用于描述數據結構的 -- 一次誤操作就有可能破壞該堆棧。

而 SPL 的 SplStack 對象則嚴格以堆棧的形式描述數據,并提供對應的方法。同時,這樣的代碼應該也能理解它在操作堆棧而非某個數組,從而能讓你的同伴更好的理解相應的代碼,并且它更快。

最后,可能上述那些慘白的例子還不足矣「誘惑你」去使用 SPL。實踐出真知,SPL 更多、更強大的功能需要你自己去挖掘。而它正如寶石般的慢慢雕砌,才能散發光輝。





以上就是PHP SPL應用淺析的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性xxxxx极品娇小| 亚洲欧美综合区自拍另类| 久久久久久久久久久免费精品| 欧美精品www在线观看| 国产日韩欧美在线观看| 韩日欧美一区二区| 亚洲精品一区二区三区不| 国产精品欧美一区二区三区奶水| 欧美高清电影在线看| 在线观看视频99| 欧美天天综合色影久久精品| 亚洲精品v天堂中文字幕| 国产成人精品免高潮费视频| 国产精品永久在线| 精品国产一区二区三区久久久狼| 亚洲国产精品久久久久久| 精品久久国产精品| 欧美激情国产精品| 亚洲精品久久在线| 午夜精品福利在线观看| 欧美乱大交做爰xxxⅹ性3| 欧美电影在线免费观看网站| 国产一区二区动漫| 欧美大荫蒂xxx| 亚洲激情视频在线播放| 亚洲自拍小视频| 国产精品日韩一区| 欧美性xxxx在线播放| 96sao精品视频在线观看| 精品爽片免费看久久| 日韩福利视频在线观看| 精品欧美aⅴ在线网站| 国语自产偷拍精品视频偷| 亚洲无线码在线一区观看| 国产精品99一区| 伊人久久久久久久久久| 久久久久久中文| 日韩69视频在线观看| 欧洲亚洲在线视频| 大量国产精品视频| 国产日韩欧美91| 久久精品夜夜夜夜夜久久| 亚洲国产黄色片| 激情成人在线视频| 欧美激情视频一区二区| 精品久久久香蕉免费精品视频| 精品亚洲一区二区三区| 久久久欧美一区二区| 成人精品一区二区三区电影免费| 亚洲一区中文字幕在线观看| 日韩电影大全免费观看2023年上| 91精品久久久久久久久久| 亚洲国产高清福利视频| 久久精品国产2020观看福利| 亚洲欧美日韩中文视频| 国产美女精品视频免费观看| 91精品啪aⅴ在线观看国产| 亚洲欧美国产高清va在线播| 国产视频精品免费播放| 久久99热精品这里久久精品| 青青草成人在线| 亚洲精品免费一区二区三区| 国产在线拍偷自揄拍精品| 欧美日韩激情小视频| 欧美精品免费看| 亚洲伊人久久大香线蕉av| 欧美大片免费观看| 亚洲一区二区精品| 欧美成人激情视频| 日韩欧美亚洲国产一区| 久久精品国产清自在天天线| 亚洲综合精品一区二区| 亚洲国产日韩精品在线| 亚洲一区免费网站| 国产成人精品久久久| 97**国产露脸精品国产| 日韩专区中文字幕| 亚洲男人的天堂在线| 欧美国产日韩一区二区三区| 中文字幕av一区二区| 97激碰免费视频| 91亚洲国产精品| 精品无人区太爽高潮在线播放| 国产精品视频午夜| 51色欧美片视频在线观看| 亚洲国产中文字幕久久网| 国产精品海角社区在线观看| 国产精品久久久久久久久免费| 精品久久久中文| 国产精品视频在线播放| 久久精品最新地址| 国产成人精品免高潮在线观看| 久久精品成人欧美大片古装| 一区二区三区日韩在线| 成人国产在线视频| 国产精品久久久久91| 久久精品亚洲94久久精品| 欧美一区二区色| 国产精品高清在线观看| 一夜七次郎国产精品亚洲| 国产91热爆ts人妖在线| 久久久久久噜噜噜久久久精品| 91在线观看免费高清| 亚洲国模精品私拍| 国产精品成人aaaaa网站| 久久影院资源站| 日韩中文字幕在线看| 欧美—级高清免费播放| 欧洲亚洲妇女av| 欧美激情第1页| 俺去啦;欧美日韩| 欧美激情免费在线| 欧美成年人在线观看| 国产视频在线一区二区| 麻豆国产va免费精品高清在线| 日本精品视频在线观看| 亚洲人成自拍网站| 国产不卡精品视男人的天堂| 国产99视频在线观看| 伊人久久久久久久久久久| 欧美国产亚洲视频| 欧美第一黄色网| 国产精品com| 欧美最近摘花xxxx摘花| 在线看福利67194| 国产一区二区三区在线视频| 精品福利在线视频| 蜜臀久久99精品久久久久久宅男| 亚洲美女免费精品视频在线观看| 国产成人啪精品视频免费网| 俺去了亚洲欧美日韩| 精品久久久久久国产91| 伊人亚洲福利一区二区三区| 日韩一区二区三区国产| 国产成人精品免费久久久久| 91国偷自产一区二区三区的观看方式| 亚洲性日韩精品一区二区| 日韩欧美在线免费观看| 少妇精69xxtheporn| 国产精品一区二区久久久久| 久久久久久噜噜噜久久久精品| 国自在线精品视频| 欧美又大又粗又长| 国产亚洲精品久久久久久777| 欧美视频中文在线看| 国产精品一区二区久久久久| 国内精品国产三级国产在线专| 91在线看www| 国产日韩亚洲欧美| 欧美精品在线观看| 欧洲成人午夜免费大片| 亚洲第一视频网站| 亚洲欧美精品伊人久久| 亚洲国产成人精品一区二区| 色综久久综合桃花网| 中文字幕欧美日韩va免费视频| 日韩影视在线观看| 亚洲最大中文字幕| 最近2019年手机中文字幕| 久久久久久久久亚洲| 欧美极品欧美精品欧美视频| 久久久久久18| 91精品国产高清久久久久久| 亚洲精品国偷自产在线99热|