--- title: PHP常用函數與自訂函數 tags: 泰職_前端網頁開發, CH03-04, 4H date: 2019-10-18 --- # PHP常用函數與自訂函數 [TOC] > [name=Loki Jiang][time=Wed, Jun 19, 2019 9:47 AM] --- :::info 請開始在Web目錄下新增檔案 **2_array.php**,為了簡化程式碼結構將不建置HTML基本結構。請開始做PHP各種練習並預覽網頁結果。 ::: ## 常用的函數(式) php本身的函數非常多,譬如之前所用的`rand()`就是其中一種。同時常有重複的函數功能,譬如`mt_rand()`跟`rand()`。你不需要特別去背函式庫,只需要用到時就去查,慢慢常用的就會記住。 ### phpinfo() 可以拿來查看PHP環境檢查上的確認。也是屬於比較私密的資料,不要放上網址讓知道你伺服器環境的弱點而被攻擊。 ```php= <?php phpinfo(); ?> ``` ### rand(min,max) 會產生min~max之間的隨機整數,這裡不帶範例。 ### array(); 可以用array()函式快速建立一個陣列組合,多值用,分開。記得要用變數儲存。你也可以指定'索引'=>'內容' ```php= //array()可以快速指定完整的陣列,記得用變數儲存 $ary1=array("加菲貓","凱蒂貓","湯姆貓"); $ary2=array(5=>"加菲貓","jp"=>"凱蒂貓","湯姆貓"); print_r($ary2); print("<hr>"); /* array相關的函數很多,這裡不一一列舉,你可以參考這裡: http://www.w3school.com.cn/php/php_ref_array.asp 如果有用到再個別介紹 */ ``` ### unset() 殺掉變數,可以殺掉一個完整變數,或是殺掉陣列內的某一格或整個陣列變數。你可以拿來跟指定變數=null做差異比較。 ```php= //unset() 可以殺掉變數 $var = 'hello world'; unset($var); var_dump($var); print("<hr>"); unset($ary2[5]); //根據前例子,殺掉加菲貓 var_dump($ary2); //相對於變數等於null時,則是變數沒有內容,但變數存在 $var = 'hello world'; $var=null; var_dump($var); print("<hr>"); ``` ### date(format) 產生系統時間(以php.ini宣告的時區為主,預設GMT+0),format要填寫指定所需格式。參考網址[link>>時間格式](https://www.php.net/manual/en/function.date.php) ```php= /*系統時間與日期*/ $now=date("Y-m-d H:i:s"); echo "現在系統時間為 ".$now."<br>"; ``` 如果此時要事後調整時區,比較直覺的作法是將時間往後推。透過hour+7的寫法。 ```php= /*系統時間與日期*/ $now=date("Y-m-d H:i:s"); echo "現在系統時間為 ".$now."<br>"; //date()可以根據想要的format(前面)去顯示,同時也能做增加減少(後面)但必須先把文字轉成時間語 $timelang=strtotime("+6 hours"); //你可以試著echo 這裡會得到一堆數字 $tw=date("Y-m-d H:i:s",$timelang); //台灣時間 echo "現在台灣時間為 ".$tw."<br>"; ``` strtotime()能將字串指令變成時間代碼。提供時間與時間的數學加減計算。 ### date\_default\_timezone_set() 直接告知網頁是以時區以哪個為主,這屬於比較正式的時區宣告。不是透過上面比較治標不治本的方法用調數字去補足。 ```php= date_default_timezone_set('Asia/Taipei'); echo "現在系統時間為 ".date("Y-m-d H:i:s"); //台灣時間 ``` ### ceil() && floor() && round() 無條件進位 && 無條件捨去 && 四捨五入,用在計算時使用 ```php= echo "10÷3=??<br>"; echo "ceil: ".ceil(10/3)."<br>"; echo "floor: ".floor(10/3)."<br>"; echo "round: ".round(10/3)."<br>"; ``` ### substr() && mb_substr() 擷取字串,能將一個文字串做擷取某部分出來。後者是針對中文的支援。 ```php= // substr 擷取字串 echo substr("abcdefg",2,3)."<br>"; echo mb_substr("不要打架要打去練舞室打",4,6); ``` ### str_replace() 抽取某字串進行字串替換,不特別帶練習 ### addslashes() 自動增加反斜線在特殊符號'"/之前綴,不特別帶練習 ### md5() md5加密,可以單向字串加密但無法反向解密,通常是對帳密認證之類做存取後兩者比對。 ### chr() 查詢ASCII碼的字串值。通常用在程式連續產字的時候方便性。 ```php= //chr 轉為ascii code=> 0-9, a-z,A-Z = 48-57, 97-122, 65-90 echo chr(97); //a ``` 練習:產生一組隨機密碼,由0-9, a-z,A-Z組成,密碼長度8~12 提示:你會需要用到rand,for,ifelse,chr 解答: ```php= $num=rand(8,16); for($i=0;$i<$num;$i++){ $word=rand(0,61); if($word>35) echo chr($word+29); elseif($word>10) echo chr($word+87); else echo $word; } ``` --- ## 自訂的函式 你可以自訂一個函式,透過丟入返回完成任務達到獨立事件處理。 練習:跟著做,說話小程式 ```php= /*custom function*/ function say($who,$num){ echo $ai_say="hello ".$who."! "; if($num>60) return "You are Great"; } $name="Mark"; echo $msg=say($name,30); // echo $ai_say; //error_sample ``` 透過這個小範例有不少地方要注意: 1. 可以傳入變數,讓函式方便接著處理。 2. function的世界是獨立的,只能透過()或return傳遞資料,除了特別能力的變數。 3. 程式由右到左,所以你要能理解echo的執行觸發順序。 4. return可以不寫,如果你不需要回傳。 5. 有return情況下,外面程式也可以不理會。 自我練習:拿前面的密碼產生練習。 主程式提供彈性的數量值給副程式。由副程式產生對應數量的密碼給主。然後主程式把資料顯示出來。 解答: ```php= function pwd($many) { for ($run = 1; $run <= $many; $run++) { $num = rand(8, 16); $code = ""; for ($i = 0; $i < $num; $i++) { $word = rand(0, 61); if ($word > 35) $code .= chr($word + 29); elseif ($word > 10) $code .= chr($word + 87); else $code .= $word; } $ary[] = $code; } return $ary; } $num = 5; $result = pwd($num); foreach ($result as $msg) { echo $msg . "<br>"; } ?> ``` ## 回家作業1 隨機1~100顆星星填滿你的畫面,每個星星的顏色大小隨機不同。 用到php=rand+for與HTML=DIV+style 高手挑戰 背景黑色,星星顏色偏向淺色系。讓星星透過css animate旋轉且速度不同。 ## 回家作業2 大樂透電腦選號1 ~ 49,每次產生5 ~ 10組樂透號組,每組6個號碼不重複 用到array(),array_values(),sort(),for(),rand(),foreach(); :link: [View Full Code](https://gist.github.com/summer10920/ce630e2dd7fc44c369aef712e5a60b53) <!-- :link: [View Homework Code]:(https://gist.github.com/summer10920/e072f56af28f5d2ebdeb45fa450208df) -->