330 likes | 533 Views
PHP 函數、陣列與 jQuery Mobile. 教材. 陳會安 著( 2013 ), PHP+MySQL 與 jQuery Mobile 跨行動裝置網站開發, 碁峰資訊股份有限公司, ISBN 9789862768563 (書號 ACL037900 ) 楊仁和 譯( 2012 ), 深入淺出行動網站開發, 碁峰資訊股份有限公司, ISBN 9789862765005 (書號 A310 )
E N D
教材 陳會安 著(2013), PHP+MySQL 與 jQuery Mobile 跨行動裝置網站開發, 碁峰資訊股份有限公司, ISBN 9789862768563 (書號 ACL037900) 楊仁和 譯(2012), 深入淺出行動網站開發, 碁峰資訊股份有限公司, ISBN 9789862765005 (書號 A310) 榮欽科技、陳婉凌(2012), 網頁設計必學的程式實作技術-HTML5+CSS3+JavaScript, 博碩文化, ISBN: 978-986-201-664-0 (書號 PG31237 )
大綱 PHP函數 變數範圍與參數傳遞 PHP的一維索引陣列 二維與結合陣列 字串與字串函數 整合jQuery Mobile與版面配置
建立PHP函數 • 關鍵字 function • 不宣告傳回值 • 沒有參數也必須加 ()
PHP的變數範圍 Variable Scope • 區域變數(Local Variables) • 在函數內指定的變數,只能在函數內使用 • 函數參數也是區域變數。 • 全域變數(Global Variables) • 在函數外宣告,整個PHP程式檔都可以存取此變數 • 在函數中使用全域變數要宣告 global • 靜態變數(Static Variables) • 一種區域變數,在變數前加 static 關鍵字 • 變數值不會消失
傳值或傳址呼叫函數 • 兩種參數傳遞方式
傳值呼叫 Call by Value參考呼叫 Call by Reference PHP 沒有指標但是有 Reference
PHP陣列的基礎 • Array • 基本資料結構 • 索引陣列 Indexed Array • 以數字作為索引,從 0 開始編號 • 結合陣列 Associative Array • 以鍵值字串作為索引 • Key-Value Pair
結合陣列(Associative Arrays) $today = getdate($stamps); $month = $today["month"]; $day = $today["mday"]; $year = $today["year"];
一維索引陣列 • PHP陣列不需要事先宣告 • 直接指定陣列元素,索引值自動從0開始增加,每次加1 • $names[] = "江小魚"; • $names[] = "陳允傑"; • $names[] = "楊過"; • 相當於使用下列索引值指定陣列元素 • $names[0] = "江小魚"; • $names[1] = "陳允傑"; • $names[2] = "楊過";
一維索引陣列 • 使用array()語言建構子(Language Construct)建立陣列 • 不是函數,而是PHP語言的關鍵字 • $grades = array(78, 55, 89, 93);
存取陣列元素 $grades[2] = 65; $total += $grades[$i]; for ( $i = 0; $i < count($grades); $i++ ) { echo "$i=>$grades[$i] "; } foreach ($grades as $element) { echo "$element "; }
函數的不定長度參數列Variable-Length Arguments • 函數參數不指明資料型態和變數名稱 • 在函數中取得傳入的參數資訊
二維陣列 $row0 = array(64, 65); $row1 = array(77, 81); $row2 = array(89, 93); $grades = array($row0, $row1, $row2);
結合陣列 $arr["color"] = "紅色"; $arr["name"] = "毛利"; $arr["shape"] = "圓形"; $arr[] = 50; $arr = array( "color"=>"黑色", "name"=> "科男", "shape"=>"三角形", 100 ); if (!isset($arr["type"])) $arr["type"] = "PHP"; array_key_exists(key, array)函數可以檢查第2個參數的結合陣列是否有第1個參數的鍵值,如果有,傳回true。
刪除結合陣列元素 • 刪除結合陣列元素是使用unset() • unset($arr["type"]);
走訪結合陣列元素 • 使用foreach foreach($arr as $key=>$value) { echo "$key=>$value "; }
require()和include() • require()可以在PHP程式直接引用其他檔案的PHP程式碼,也就是將require()程式碼位置取代成引入檔內容。例如:在PHP程式引用Header.php引入檔,引入檔副檔名可以是.php、.inc或.txt,如下所示: • <?php • require "shared/Header.php"; • require ("shared/Header.php"); • $file = "shared/Header.php"; • require $file; • ?>
require()和include() • 如果PHP程式只準備引用引入檔一次,而且只能一次,我們可以使用require_once()來引用檔案,如下所示: • require_once("shared/Header.php"); • 請注意!require()引用的引入檔不論位在PHP程式檔的哪一個位置,就算位在條件程式區塊中,也一定會插入PHP檔案。
require()和include() • PHP的include()和require()功能和使用方式都很相似,只是require()的引入檔一定要存在,否則會產生執行錯誤,include()的引入檔案如果不存在,只會顯示警告訊息,PHP程式一樣可以繼續執行。
require()和include() • 實作上,include()和require()除了建立版面配置外,也可以將PHP函數抽出成函數庫檔案,其副檔名通常為.inc,如此PHP程式需要使用函數時,只需在PHP程式引用函數庫檔案即可,這些.inc檔案如同使用者自訂的PHP函數庫,如下所示: • <?php include(shared/MyFunc.inc); ?> • 如果PHP程式只準備引用引入檔一次,而且只能一次,我們可以使用include_once()來引用檔案,如下所示: • include_once("shared/MyFunc.inc"); • 上述程式碼當引入檔已經引用過時,將不會再次引用引入檔。
在PHP程式檔使用jQuery Mobile • 對於jQuery Mobile程式結構來說,在<body>開始標籤之前都是可重複使用區塊,只有<title>標籤的標題文字可能不同,和可能需要含括自訂CSS樣式和JavaScript檔案。在PHP程式可以使用include()引用位在<body>開始標籤之前的HTML標籤,如下所示: • <?php // jQuery Mobile標頭 • $pageTitle="Ch7_6_2.php"; // 標題文字 • // $CSSFile="MyCSS.css"; • // $JSFile="MyJS.js"; • include("shared/jQM_Header.php"); • ?>
在PHP程式檔使用jQuery Mobile • 當指定變數值後,使用include()引用jQM_Header.php檔案的jQuery Mobile標頭區塊,其內容擁有<html>、<body>開始標籤,和<head>區塊的<meta>標籤,含括jQuery Mobile框架的CSS樣式和JavaScript程式碼檔案的<link>和<script>標籤。 • 接著2個if條件判斷是否有自訂外部CSS和JavaScript檔案(即指定$CSSFile和$JSFile變數值),如下所示: • <?php if (isset($CSSFile)) { ?> • <link rel="stylesheet" href="<?php echo $CSSFile; ?>"> • <?php } • if (isset($JSFile)) { ?> • <script src="<?php echo $JSFile; ?>"></script> • <?php } ?>
在PHP程式檔使用jQuery Mobile • 本節版面配置包含完整jQuery Mobile頁面標籤,如果jQuery Mobile頁面擁有固定標題和註腳工具列,我們一樣可以使用相同方式將這些標籤建立成PHP引入檔。
練習題:十八豆仔遊戲 • 四顆骰子,計分方式: • 豹子:四顆骰子點數相同 • 二同二同:比較大的點數X2 • 二同二異:異點相加 • 三同或四不同:重擲 • 最大:豹子六點 • 最小:三點(BG)
練習題:十八豆仔遊戲 • 如何模擬擲骰子? • $n = rand(1, 6); • 如何計算點數? • 以陣列儲存四顆骰子的點數 • $dice[$i] = $n; • 以陣列計算骰子出現的次數 • if (!isset($count[$n])) $count[$n] = 1; else $count[$n] += 1;
練習題:十八豆仔遊戲 • 以 count() 計算陣列長度 • $count 陣列長度為? • 1:豹子 • 2:三同 或 兩同兩同 • 3:兩同兩異 • 4:無點數