函數含義php
函數結構java
function 函數名 () { //代碼塊 }
函數名定義規則數組
[a-zA-Z_\x7f-\xff]
[a-zA-Z0-9_\x7f-\xff]
函數的返回值函數
PHP
並無在函數聲明的時候顯示函數是否有返回值,若是函數內部使用了return
即表示有返回值,反之則表示沒有返回值,返回類型能夠爲對象、數組、字符串等。函數變量code
//局部變量 //局部動態變量:變量只在函數內部執行,執行完畢則被銷燬; //局部靜態變量:使用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');