函式
函式含義
- 函式:是實作特定功能的、可以重復執行的代碼段;
- 函式名:從語法上講,函式名中能有漢字,但在實際開發中不建議使用!
函式結構
function 函式名 () {
//代碼塊
}
函式名定義規則
- 開頭:
[a-zA-Z_\x7f-\xff] - 函式名:
[a-zA-Z0-9_\x7f-\xff] - 函式的首字母不能為數字、可以是漢子或者字母,函式中間可以使用數字
函式的回傳值
- 和其他語言不同的是,
PHP并沒有在函式宣告的時候顯示函式是否有回傳值,如果函式內部使用了return即表示有回傳值,反之則表示沒有回傳值,回傳型別可以為物件、陣列、字串等,
函式變數
//區域變數
//區域動態變數:變數只在函式內部執行,執行完畢則被銷毀;
//區域靜態變數:使用static修飾,執行完畢不被銷毀;
//注:函式內部定義的變數,為區域變數,函式外部不能訪問,
function func()
{
$a = 3; //區域動態變數
static $b = 34; //區域靜態變數
}
//全域變數
//在函式外部定義的變數,稱為全域變數,在函式內部使用全域變數的時候,不能和其他語言一樣直接使用,有兩種使用方法:
//(1)用global關鍵字進行宣告后使用
$a = 3;
function func()
{
global $a;
echo $a;
}
//(2)使用超全域變數陣列$GLOBALS直接訪問
$a = 3;
function func()
{
echo $GLOBALS['a'];
}
函式的引數
值傳遞和參考傳遞
//值傳遞:當一個變數的值賦予給另外一個變數的時候,改變其中一個變數的值,將不會影響到另外一個變數的值
//參考傳遞:新變數指向了原始變數,改動新的變數將影響到原始變數,反之亦然,(只有有名字的變數才能參考傳遞,比如運算式就不可以)
//注:在函式中傳遞引數的型別為物件時,即使不加&,也是參考傳遞,因為物件名對應的是該物件的參考地址,
$a = 4;
function func1($c) //值傳遞
{
$c = 7;
}
func1($a);
echo $a, "\n"; //4,函式沒有改變$a的值
function func2(&$d) //參考傳遞
{
$d = 7;
}
func2($a);
echo $a, "\n"; //7,函式改變了$a的值
引數默認值
//如果$a和$b沒有默認值,呼叫該函式的時候必須傳值,否則會報錯,如果有默認值,可以不傳引數
function func($a = 3, $b = 5)
{
echo "a的值為{$a}, b的值為{$b}\n";
}
func();
可變引數串列
/*
*在函式定義時,形參可以省略不寫,在函式內部可以通過系統方法獲取傳遞進行的引數陣列,
*func_num_args():傳入函式實參的個數
*func_get_args():傳入函式實參串列(陣列形式)
*func_get_arg(index):傳人函式具體位置的實參
*/
function fun6()
{
echo func_num_args(), "\n"; //3
print_r(func_get_args()); //陣列
echo func_get_arg(0); //10
}
fun6(10, 11, 12);
傳參型別限定
//函式定義時,可以給引數限定型別,共三種型別:array,object,callback
function func(array $a) //實參必須為陣列型別
{
print_r($a);
}
//func(1); //會報錯
func([1, 2, 3]);
復雜函式
可變函式
//將函式的名字賦值給變數,通過變數去呼叫函式,讓函式的呼叫更具多樣性
/*
* is_callable(函式):判斷函式能否被呼叫
* function_exists(函式):判斷函式是否存在
*/
function func()
{
echo 'hello, world', "\n";
}
$fun = 'func';
if (is_callable($fun)){ //判斷是否能呼叫
echo '能呼叫', "\n";
$fun();
}
if (function_exists($fun)){
echo '能呼叫', "\n";
$fun();
}
函式的嵌套
/*
* php所有定義的函式,作用域都是全域的
*
* 和其他語言比如java相比,php不存在內置函式,意思就是說bar()不是foo()的內置函式,
* 兩者沒有區別,作用域都是全域的,在bar()函式內不能呼叫foo()中宣告的變數,但是bar()
* 函式必須在foo()呼叫之后才會被定義,才能被呼叫
*
*/
function foo()
{
$a = 'hello, world';
function bar()
{
/* 不能呼叫變數$a */
echo 'bar()函式被呼叫';
}
/* 內部可以呼叫bar(),因為其已經被定義 */
//bar();
}
/* 現在不能呼叫bar(),因為其還沒有被定義 */
foo();
/* 現在可以呼叫bar(),因為foo()呼叫之后,bar()已經被定義 */
bar();
遞回呼叫:函式呼叫自己本身,遞回里面需要有跳出遞回的判斷條件
匿名函式
/*
* 匿名函式
* 函式沒有指定名稱,稱為匿名函式
* 通過將函式賦給變數,通過變數來實作呼叫函式
*/
$say = function($str) {
echo 'hello, world';
};
$say('aaa');
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69419.html
標籤:PHP
上一篇:php字串函式
下一篇:php數學函式
