當前位置:首頁 » 編程語言 » 迭代器php

迭代器php

發布時間: 2022-12-13 00:22:00

⑴ foreach和迭代器的區別 php

迭代器是一種更高級的工具。foreach是簡單的循環語法。雖然功能上看起來相似。但迭代器是工具,這是二者性質上的不同,所以迭代器有更豐富的功能特性,還可以自定義具體的實現。特別是在內存佔用上,迭代器是按需讀取數據,foreach是一次性載入數據。PHP裡面PDO,SimpleXML裡面都有迭代器的具體實現,更完整的全部在SPL擴展部分。

⑵ php書籍推薦

關注PHP的人越來越多了,可惜國內PHP5方面的好書還非常少,幾乎可以說沒有。
PHP4即將是明日黃花,所以學PHP最好直接學PHP5。下面是我認為比較好的PHP5書籍:

1. Core PHP Programming, 3rd Edition

這本書是PHP專家Leon Atkinson和PHP創始人之一Zeev Suraski合著的。國內有
第2版,講PHP4的,但這本第3版還買不到。學校圖書館有一本原版,可惜只有一本
(現在在我手裡,咔咔)。講得非常全面,做為Web編程方面的知識,幾乎全部包括
了。最有價值的是Part 4,講Software Enginerring的,介紹了設計、效率與調試,
還介紹了四種最常用的設計模式,非常有參考價值。可惜畢竟是03年的書,那時候
PHP5還在開發中,所以裡面有一些內容並不完全適合現在的PHP5,比如名字空間(
PHP5並不支持名字空間)。不過瑕不掩瑜,做為PHP5的一本綜合書籍,這本書非常
經典,可以用於入門,也可以用於提高。

2. PHP5 Power Programming

這本書是PHP的另一創始人Andi Gutmans寫的,專門針對PHP5。個人感覺這本書
不適合學習,但很適合提高時參考。裡面花了大量篇幅講述PHP5的面向對象機制,
不過基本上跟Core PHP Programming重復,所以看過Core後再看這些將很快,可以
當成溫故一遍。還有一章介紹了PHP5里的高級面向對象特性,如迭代器,反射API(
Reflection API,在其它面向對象語言里稱自省),也介紹了設計模式。
可惜的是,跟上面一本書一樣,都是只講PHP特性的書,具體到PHP高級應用的
實戰講得感覺比較欠缺,像MVC模式,兩本書都沒講到,而這些對PHP高級編程來說是
非常重要的。比較令人安慰的是這本書還介紹了很多PHP高級特性,像PEAR包,APC,
APD,Xdebug,還有Zend Studio的使用,等等,這些還是非常有價值的。
總之,這是一本很適合提高時使用的書籍,跟Core一樣,也是PHP書籍中的經典。

3. PHP and Mysql Web Development, 3rd Edition

這是國內唯一能買到的PHP5書籍,中文翻譯,但翻譯質量不怎麼樣,有些句子
讀起來莫名其妙。這本書比較適合初中級的PHP學習,而且非常實際,有很多基本應
用的實例,很適合入門。除了資料庫知識很不錯外,裡面也講到了使用PHP和MySQL
開發中等項目時所需要考慮到的問題,介紹了很多基本的軟體項目管理方法,非常
實用。後面幾章是一些實例,介紹了購物車(我最不喜歡這東西),郵件列表,內容
管理系統和論壇的編寫,不過都只是基礎,沒有高級技巧,所以看起來會覺得很不舒
服,呵呵。
裡面有一張泛泛地講到了電子商務安全,可以參考下。個人感覺相當不錯的內容
是MySQL部分,基本涵蓋了資料庫基礎和MySQL基礎及高級特性,但限於篇幅,沒有去
講得很深入,權當是入門指引了。
因為是國內能買到的,所以很多人可能會喜歡從這本書開始學PHP5,我覺得也不
錯。總之很推薦這本書。

4. Essential PHP Security

這是一本講述PHP編碼安全的書,非常需要引起PHP開發人員的重視。我覺得這是
一本必讀書籍,讀過後會讓你冒冷汗。現在注重安全編碼的人實在太少了,對於一個
專業的PHP程序員,PHP安全特性絕對要爛熟於胸,而這本書就提供了一個非常好的視
角。

5. PHP Architect's Guide to PHP Design Patterns

這本書我正在看,對於PHP5面向對象的學習絕對非常有幫助。裡面介紹了非常多
的設計模式,直接以PHP語言實現出來,可以讓你一步到位使用模式思想。第17章介
紹了PHP里的MVC模式,可以說是帶了個好頭,很有參考價值。
由於還沒看完,所以不敢多評價,但可以肯定的是,這本書對於學PHP5面向對象
高級編程的人來說是絕對必備的。
國內有中文版,phpchina社區翻譯的,可以下載過來參考下。另外,好像關於
PHP設計模式的書又出了一本,叫做《PHP5: Objects, Patterns and Practice》,
可惜我Google了半天也找不到下載地址,只能作罷了,希望以後能找到。可以肯定這
又將是一本讓人振奮的書。
又將是一本讓人振奮的書。

最後想說明的是,Oreilly的PHP書就不用看了,包括PHP創始人Rasmus Lerdorf寫的
《Programming PHP》(現在好像出第2版了),講得東西基本上全是PHP手冊里的東
西,沒必要重復浪費時間。像《Learning PHP5》,《PHP Cookbook》之類,說實話
我個人感覺真的只是PHP手冊的子集。最近好像又出了本同樣可以看成是子集的書,
書名是《Learning PHP and MySQL》,看了一眼就沒看了。不是對Oreilly有偏見,
只是因為它的書全是入門級的,沒什麼含金量,屬於看過就扔的那種。想想K&R的
《The C Programming Language》吧,呵呵。

最最後想說明的是,PHP手冊,一定要反復看!這個是學PHP最重要的參考資料,每個
人都應該有一本以備不時之需。有中文翻譯版的,不過裡面的鏈接有錯誤,看起來不
是很方便,但多摸索幾次就能把鏈接弄對了。

大概就講這些了,只是我個人觀點,希望大家指點批評,共同進步。

⑶ PHP的SPL標准庫的用法介紹

本文介紹下,php編程中SPL中的用法,SPL,PHP 標准庫(Standard PHP Library) ,此從 PHP 5.0 起內置的組件和介面,有需要的朋友參考下。

PHP SPL的用法

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、splclasses、iteratorapply 等的幫助函數(helper functions),用於重載對應的功能。

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

重載 autoloader

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

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

另外的問題:

當項目變得越來越復雜, __autoload 內的邏輯也會變得相應的`復雜。到最後,甚至你會加入異常判斷,以及將所有的載入類的邏輯如數寫到其中。

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

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

復制代碼 代碼示例:

<?php

class MyLoader {

public static function doAutoload($class) {

// 本模塊對應的 autoload 操作

}

}

spl_autoload_register( array('MyLoader', 'doAutoload') );

?>

spl autoload register 還能以數組的形式加入多個載入邏輯。同時,你還可以利用spl autoload unregister 移除已經不再需要的載入邏輯,這功能總會用到的。

迭代器

迭代是常見設計模式之一,普遍應用於一組數據中的統一的遍歷操作。可以毫不誇張的說,SPL 提供了所有你需要的對應數據類型的迭代器。

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

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

復制代碼 代碼示例:

<?php

class RecursiveFileFilterIterator extends FilterIterator {

// 滿足條件的擴展名

protected $ext = array('jpg','gif');

/**

* 提供 $path 並生成對應的目錄迭代器

*/

public function __construct($path) {

parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));

}

/**

* 檢查文件擴展名是否滿足條件

* // www.jbxue.com

*/

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;

}

?>

⑷ php怎麼寫出全國的城市地區

require'city.php';

//連接資料庫(PDO)

$pdo=newPDO('mysql:host=localhost;dbname=city','root','root');

$pdo->exec('setnamesutf8');

$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);

//實例化城市類

$c=newcity();

$result=$c->mycity();

$city_id=0;

foreach($resultas$k=>$value){

if(count($value)==count($value,1)){

$sql="insertintocity_province(province)value('{$value['province_name']}')";

$smt=$pdo->prepare($sql);

$smt->execute();

}else{

$sql11="insertintocity_province(province)value('{$value['province_name']}')";

$smt11=$pdo->prepare($sql11);

$smt11->execute();

foreach($value['city']as$v=>$value1){

$sql2="insertintocity_name(name,province_id)values('{$value1['city_name']}','{$k}')";

$smt2=$pdo->prepare($sql2);

$smt2->execute();

$city_id+=1;

echo$city_id.'<br>';

if(!empty($value1['area'])){

foreach($value1['area']as$valu1e2){

$sql3="insertintocity_area(area,city_id)values('{$valu1e2}','{$city_id}')";

$smt3=$pdo->prepare($sql3);

$smt3->execute();

}

}

}

}

}

城市類太大了,發不了。

我是把省、市、地區分別存在三個數據表中(我是新手,剛自己寫的)

⑸ php迭代器iterator怎麼用

使用foreach 與使用迭代器,並不沖突 
迭代器可以使用在:
1、使用返回迭代器的包或庫時(如PHP5中的SPL迭代器)
2、無法在一次的調用獲取容器的所有元素時
3、要處理數量巨大的無素時(資料庫中的表以GB計的數據)
迭代器還可以用來構造一些數據結構。
你可以去後盾人平台看看,裡面的東西不錯

⑹ PHP7.4.9版本正式更新,你知道了嗎

PHP 7.4.9 版本現已發布,具體更新內容如下:​​​​
Apache:修復了錯誤
#79030
(升級 apache2handler 的 php_apache_sapi_get_request_time 以返回 usec)。COM:修復了錯誤
#63208
(BSTR 到 PHP字 符串轉換不是 binary safe)。修復了錯誤
#63527
(DCOM 無法使用用戶名、密碼參數。)。Core :修復了錯誤
#79740
(不能靜態調用 serialize() 和 unserialize() methods)。修復了錯誤
#79783
(php_str_replace_common 中的段錯誤)。修復了錯誤
#79778
(如果轉儲帶有未解決的靜態變數的閉包,則斷言失敗)。修復了錯誤
#79779
(通過引用分配字元串偏移量的屬性時斷言失敗)。修復了錯誤
#79792
(如果銷毀了空數組,則不會刪除 HT 迭代器)。修復了錯誤
#78598
(在 undef index RW error segfaults 期間更改數組)。修復了錯誤
#79784
(如果在數組寫獲取期間的 undef var 期間更改數組,則在 free 後使用)。修復了錯誤
#79793
(如果更改了未定義索引警告中使用的字元串,則 free 後使用)。修復了錯誤
#79862
(子級中的公共非靜態屬性應優先於私有靜態)。修復了錯誤
#79877
(getimagesize 函數在一個空位元組後 silently truncates)(cmb)Fileinfo:修復了錯誤
#79756
(finfo_file 崩潰(FILEINFO_MIME))。ftp:修復了錯誤
#55857
(大文件上的 ftp_size)。Mbstring:修復了錯誤
#79787
(mb_strimwidth 不會修剪字元串)。Phar:修復了錯誤
#79797
(在 phar_parse_zipfile 函數中使用 freed hash key)。(CVE-2020-7068)Reflection:修復了錯誤
#79487
(::getStaticProperties() 忽略屬性修改)。修復了錯誤
#69804
(::getStaticPropertyValue() throws on protected props)。修復了錯誤
#79820
(當復制到 ReflectionProperty 的類型被解析時,在 free 之後使用)。Standard:修復了錯誤
#70362
(Can't () large 'data://' with open_basedir)。修復了錯誤
#78008
(dns_check_record() 在 Alpine 上始終返回 true)。修復了錯誤
#79839
(array_walk() 不 respect 屬性類型)。

⑺ 請問怎麼用PHP生成全國各省市的隨時地址

一般這樣的都是存在資料庫中,資料庫3個欄位 id pid name ,分別是 id 上級id 名稱
用數組,三維數組
比如
id pid name
1 0 廣東省
2 1 廣州市
3 2 花都區
然後PHP讀取庫,用一個迭代器,理論上可以取出無限級分類

熱點內容
war反編譯工具 發布:2025-01-22 19:41:30 瀏覽:291
奧創熊少兒編程 發布:2025-01-22 19:41:23 瀏覽:269
Qt用ftp傳文件 發布:2025-01-22 19:23:28 瀏覽:731
校園卡密碼是什麼 發布:2025-01-22 19:14:43 瀏覽:658
內存大小的存儲 發布:2025-01-22 18:58:17 瀏覽:393
tampermonkey腳本 發布:2025-01-22 18:53:17 瀏覽:117
windows7共享文件夾 發布:2025-01-22 18:53:17 瀏覽:479
如何調節安卓手機的內存 發布:2025-01-22 18:49:30 瀏覽:639
佳能相機存儲卡怎麼取消 發布:2025-01-22 18:40:59 瀏覽:569
天貓寶貝上傳 發布:2025-01-22 18:35:09 瀏覽:545