Last active
April 13, 2018 02:03
-
-
Save MilesChou/6008828 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* php function的重點: | |
* 1.全域:一經宣告後,程式的任何位置都能直接使用,包括class中。 | |
* 2.不可重載:一經宣告後,不能宣告第二次。 | |
* 3.傳值:使用傳值後,外部和內部的參數會毫不相千。 | |
* 4.傳址:使用傳址後,內部對參數的修改,外部的變數也會跟著變動。 | |
* 5.預設值:沒傳參數時,會使用預設值當參數,通常放在參數的最後面(右邊) | |
* 6.回傳值:只能回傳一個值,但可以是任何一種資料型態。 | |
* 7.可變函數:當變數後有"()"時,php會試著找該變數是否有定義為函數。 | |
* 8.全域變數:區域變數範圍之外所宣告的變數即全域變數。參考:http://www.jollen.org/php/jollen_php_book_13.html | |
* 9.靜態變數:定義一個變數,讓函式可以保留住該變數的值,直到下次的存取。參考:http://www.jaceju.net/blog/archives/670 | |
*/ | |
// 定義func1函數 | |
function func1() | |
{ | |
// 定義回傳值 | |
return '我是func1<br/>'; | |
} | |
// function func1() { } >> 錯誤:此處不可再定義func1,不可重載 | |
// 輸出'我是func1<br/>' | |
echo func1(); | |
// 定義func2函數,並使用傳值 | |
function func2($var) | |
{ | |
return '我是func2 傳給我的變數為:' . $var . '<br/>'; | |
} | |
// 輸出'我是func2 傳給我的變數為:test<br/>'; | |
echo func2('test'); | |
// 定義func3函數,使用有預設值的傳值 | |
function func3($var = '我是func3的預設值') | |
{ | |
// 因全域特性,所以可以在此呼叫func2() | |
return func2($var); | |
} | |
// 輸出'我是func2 傳給我的變數為:我是func3的預設值<br/>' | |
echo func3(); | |
// 定義一外部變數 | |
$global_var = 10; | |
// 定義func4函數,使用傳址(那個'&'符號的意思就是傳址) | |
function func4(&$var) | |
{ | |
$var++; | |
// 沒有回傳值 | |
return; | |
} | |
// func4('10'); >> 錯誤,傳址必需使用變數做位址傳送才能達到內部修改,外部變數跟著修改的效果 | |
func4($global_var); | |
// 輸出'11<br/>' | |
echo $global_var . '<br/>'; | |
// 定義func5函數,傳值啥小的太廢話不打了 | |
function func5() | |
{ | |
// 定義全域變數,之後就能直接使用外部變數$global_var了 | |
global $global_var; | |
$global_var = $global_var + 10; | |
// 沒有回傳值 | |
return; | |
} | |
func5(); | |
// 輸出'22<br/>' , 因為函數內部是直接使用全域變數修改外部變數的 | |
// 雖然全域變數方便,不過大型project通常不建議使用。 | |
// 原因很簡單:變數1個好改,1000個不知道要改到哪時。 | |
echo $global_var . '<br/>'; | |
// 靜態變數參考上面那個網頁,通常會用在使用遞回函數的時候,我也不常寫 | |
// 以下為簡單應用 | |
// tag函數,可做簡單html標籤處理 | |
function tag($str, $tag, $attb = array()) | |
{ | |
$attbs = ''; | |
foreach($attb as $key => $value) | |
{ | |
$attbs .= ' ' . $key . '="' . $value . '"'; | |
} | |
return '<' . $tag . $attbs . '>' . $str . '</' . $tag . '>'; | |
} | |
// table函數,將輸入的陣列轉換成html表格的形式 | |
function table($arrs) | |
{ | |
$table = ''; | |
foreach($arrs as $arr) | |
{ | |
$row = ''; | |
foreach($arr as $v) | |
{ | |
$row .= tag($v, 'td'); | |
} | |
$table .= tag($row, 'tr'); | |
} | |
return tag($table, 'table', array('border' => 1)); | |
} | |
// 定義二維陣列 | |
$arr = array(); | |
$arr[] = array('使用者', '綽號'); | |
$arr[] = array('Miles', 'QQ'); | |
$arr[] = array('Tails', '路人'); | |
// 輸出表格 | |
echo table($arr); | |
// table指的東西有很多,可能是html表格,也可能是資料庫的表格,也可能是程式所要參考的表,也有可能是桌子 | |
// 先前提到,因不能重載,這時函數命名上會有困難,所以比較簡單的解決方法就是使用class了 | |
// 不同的class可以使用相同的function(method)名稱和相同的變數(member)名稱 | |
// 所以class依功能取好名稱後,內部的function如何命名就無關緊要了. | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment