Skip to content

Instantly share code, notes, and snippets.

@MilesChou
Last active April 13, 2018 02:03
Show Gist options
  • Save MilesChou/6008828 to your computer and use it in GitHub Desktop.
Save MilesChou/6008828 to your computer and use it in GitHub Desktop.
<?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