隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)更簡單,就像我們生活中排隊(duì)一樣,它的特性是先進(jìn)先出(FIFO)。
十多年的祥云網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整祥云建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“祥云網(wǎng)站設(shè)計(jì)”,“祥云網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
PHP
SPL中SplQueue類就是實(shí)現(xiàn)隊(duì)列操作,和棧一樣,它也可以繼承雙鏈表(SplDoublyLinkedList)輕松實(shí)現(xiàn)。
SplQueue類摘要如下:
SplQueue簡單使用如下:
復(fù)制代碼
代碼如下:
$queue
=
new
SplQueue();
/**
*
可見隊(duì)列和雙鏈表的區(qū)別就是IteratorMode改變了而已,棧的IteratorMode只能為:
*
(1)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_KEEP
(默認(rèn)值,迭代后數(shù)據(jù)保存)
*
(2)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE
(迭代后數(shù)據(jù)刪除)
*/
$queue-setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE);
//SplQueue::enqueue()其實(shí)就是
SplDoublyLinkedList::push()
$queue-enqueue('a');
$queue-enqueue('b');
$queue-enqueue('c');
//SplQueue::dequeue()其實(shí)就是
SplDoublyLinkedList::shift()
print_r($queue-dequeue());
foreach($queue
as
$item)
{
echo
$item
.
PHP_EOL;
}
print_r($queue);
而優(yōu)先隊(duì)列SplPriorityQueue是基于堆(后文介紹)實(shí)現(xiàn)的。
SplPriorityQueue的類摘要如下:
SplPriorityQueue簡單使用:
$pq
=
new
SplPriorityQueue();
$pq-insert('a',
10);
$pq-insert('b',
1);
$pq-insert('c',
8);
echo
$pq-count()
.PHP_EOL;
//3
echo
$pq-current()
.
PHP_EOL;
//a
/**
*
設(shè)置元素出隊(duì)模式
*
SplPriorityQueue::EXTR_DATA
僅提取值
*
SplPriorityQueue::EXTR_PRIORITY
僅提取優(yōu)先級
*
SplPriorityQueue::EXTR_BOTH
提取數(shù)組包含值和優(yōu)先級
*/
$pq-setExtractFlags(SplPriorityQueue::EXTR_DATA);
while($pq-valid())
{
print_r($pq-current());
//a
c
b
$pq-next();
}
SPL是php標(biāo)準(zhǔn)庫(Standard PHP Library)的簡寫。他是從php5.0版本開始內(nèi)置的組件和接口。提供了重載,迭代器,數(shù)據(jù)結(jié)構(gòu)等的實(shí)現(xiàn)。
變化過快的現(xiàn)代商業(yè)環(huán)境.筆者發(fā)現(xiàn),如今支持面向過程的開發(fā)者大多知識不夠全,不夠廣,還不足以用OO來解決商業(yè)開發(fā)。
當(dāng)然這不是絕對,但一位有著C++,JAVA,Smalltalk、EIFFEL等開發(fā)語言背景的程序員,他會無一不支持OO開發(fā)模式,相反網(wǎng)絡(luò)知識框架基礎(chǔ)較少,各種協(xié)議一知半解,只會PHP的開發(fā)人員他們會覺得面向過程最適合他們。
全面剖析:
下一步中大型PHP商業(yè)應(yīng)用的主流的開發(fā)將會是以O(shè)O,OA軟件開發(fā)模式主領(lǐng)潮流,從PHP5到PHP6,google Trends足以證明這一點(diǎn),過去傳統(tǒng)的面向過程的開發(fā)模式將會被棄之,如果你是一位真正合格程序員,你會發(fā)現(xiàn)OO所帶來的好處是深遠(yuǎn)的。
不僅是軟件工程所帶來的收益,而且此種思維理念對個(gè)人思維方式定有大的變革,你會發(fā)現(xiàn)你做事情開始OO方式,OO無處不在。
當(dāng)然筆者不想去論述用面向過程寫PHP代碼所帶來的好處(如簡單的應(yīng)用),那種單人時(shí)代的開發(fā)方式如兒童時(shí)代已不適合需求復(fù)雜。
SPL為PHP標(biāo)準(zhǔn)庫。內(nèi)容主要包括數(shù)據(jù)結(jié)構(gòu)類,迭代器,異常類,SPL函數(shù),還有一些接口。
數(shù)據(jù)結(jié)構(gòu)類主要包括棧,隊(duì),堆,數(shù)組等基本數(shù)據(jù)結(jié)構(gòu),php已經(jīng)幫你封裝好了,如果你要做數(shù)據(jù)處理可以直接拿來用,很方便。
迭代器是php在的新特征,在oop中使用很靈活,比如可以用來遍歷對象數(shù)組。
異常類主要是把一些常見異常封裝起來了,做成了接口,通俗將就是有個(gè)模版格式,你照著他的要求擴(kuò)展即可。
SPL函數(shù)里面有個(gè)很重要的東西,spl_autoload_register(),在oop中用來實(shí)現(xiàn)自動(dòng)加載。
其它的接口,比如SplObserver,用php這個(gè)內(nèi)置的接口實(shí)現(xiàn)觀察者模式很方便。
主要就這些了,如果你想深入了解,可以查看官方手冊。