標籤:php
昨天處理了一些私事,所以耽擱了一天,好在遞迴函式比較難以理解,所以今天有幸聽了一遍:這個基於回呼函數而存在的函數,的確不太好理解,需要將邏輯上的想法完全梳理通才可以順利書寫,這還是在擁有公式的情況下。
在經理的帶領下,我們做了一個用遞迴函式開啟當前檔案夾,並且讀取檔案夾內所有檔案的一個函數,現將代碼整理如下:
<?php //開啟檔案夾:opendir;// $a = opendir(‘.‘);// //讀取內容:readdir(資源名);// $b = ‘‘;// while(($b = readdir($a)) !== false){// echo $b."<br>";// }// closedir($a); ?> <?php function digui($path,$n=0){ $a = opendir($path);//讀取內容:readdir(資源名);$b = ‘‘;while(($b = readdir($a)) !== false){if($b == ‘.‘ ||$b == ‘..‘){continue;}echo str_repeat("--", $n);if(is_dir($path."/".$b)){echo "檔案夾".$b,"<br>";//當需要一層層地開啟所有檔案夾之時,因為重複的就是此函數本身,所以使用遞迴。digui($path."/".$b,$n+1);continue;}echo $b."<br>";}closedir($a); } // $a = ‘.‘;digui("."); ?>
一眼看上去,代碼本身不算難,但中間出了一個困擾許久的問題就是在使遞迴函式自身重複的時候,$n++和$n+1的問題,涉及到了它會怎樣顯示。
還有,continue和break在函數本身不涉及到迴圈時,是不可以使用的,否則會出現致命性錯誤,而die函數則可以在終止函數的同時,停止die命令之後所有的PHP,號稱終極劇毒。
網上所說的“die”和“exit”一個終止代碼且清理緩衝,另一個只終止代碼,純屬謠傳,二者的原始碼一模一樣,只是個別名而已,特此標記出來。
以上。
晚安。
還有,希望經理明天身體恢複健康。
本文出自 “12244243” 部落格,請務必保留此出處http://12254243.blog.51cto.com/12244243/1884884
那個PHP中號稱最難的‘遞迴函式’