PHP學習記錄(函數)

函數

函數含義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');
相關文章
相關標籤/搜索