萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP筆記:PHP中的函數使用函數

PHP筆記:PHP中的函數使用函數

函數是一門程序中不可少的一個重要的東西,很多東西我們會做成函數這樣可以方便重復調用了,下面本文章重點就是介紹函數php函數用法。

一、函數的聲明
1、語法結構

 代碼如下 復制代碼

function 函數名 (參數列表)
{
    函數體; //可選
    返回值; //return可選
}

    參數列表用逗號隔開,勿遺漏$變量符號
    函數名不區分大小寫,規則與變量一致
    函數調用才執行,可先調用後聲明
    函數名不能重名,包括系統函數

2、函數調用

 代碼如下 復制代碼

function sum($x,$y) //形參:在聲明函數時聲明的參數
{
    // $x = 1; //如果在函數內對參數賦值,則會覆蓋實參。
    // $y = 2;
    $sum = 0;
    $sum = $x + $y;
    return $sum; //執行到return函數結束,後面不再執行
}

sum();
sum(2,2); //實參:在調用函數時傳遞給形參的數值
echo sum(2,2); //通過return返回數據可作為值使用


二、函數中的變量
1、變量范圍

    局部變量:函數內部聲明與使用的變量
    全局變量:在函數外聲明,腳本任何地方均可以使用

Tips:在PHP函數中使用全局變量,要通過global關鍵字將這個全局變量包含到函數中才能使用

 代碼如下 復制代碼

$a = 1;
$b = 2;
function demo($a = '')
{
    //global 須放在前面
    //global $a,$b global 可包含多個全局變量
    //$GLOBALS['a'] //聲明全局變量 方法二
    global $a;
    $a += 5;
    echo $a;
}

demo();


2、PHP靜態變量

    靜態變量可以在同一個函數中多次調用中共用
    靜態變量只能在函數或類中聲明,不能在全局聲明。

 代碼如下 復制代碼

function demo($a = '')
{
    static $a = 0; //定義靜態變量
    $a++;
    echo "$a <br>";
}
demo(); //輸出1
demo(); //輸出2


3、變量函數

 代碼如下 復制代碼

$var = 'hello'; //變量名後面右括號,就尋找與變量值同名的函數
$var(); //等價於 hello();


三、函數分類及聲明

1、函數分類

 代碼如下 復制代碼

//常規函數
bool copy(string source,string dest)

//帶mixed,表示可以傳任何類型的數據
bool chown(string filename,mixed user)

//帶&參數的函數,這個參數只能是變量,變量值是動態的
//對數組進行排序,數組的索引保持和單元的關聯
bool arsort ( array &$array [, int $sort_flags ] )
$fruits = array('a', 'c', 'b');
arsort($fruits);
var_dump($fruits);

//默認函數,即帶[]中括號的函數,表示參數可選,若沒有傳值則使用默認值
//如果調用沒有賦值,又沒有初值則出現警告
function demo($a=1,$b=2)
{
    #code
}
demo();

//帶有...參數的函數,表示可以傳任意多個參數
//在數組開頭插入一個或多個單元
int array_unshift ( array &$array , mixed $var [, mixed $... ] )

2、聲明多個參數函數

 代碼如下 復制代碼

function Test()
{
    echo func_num_args();
}
Test('a','b','c');  // 3

func_get_arg():返回參數列表中的第N個參數

function Test()
{
    echo func_get_arg('1');
}
Test('a','b','c'); //b

使用實例

 代碼如下 復制代碼

function cls_mysql()
{
    $mysql = func_get_args();
    $conn = mysql_connect($mysql['0'], $mysql['1'], $mysql['2']);
}
cls_mysql('localhost:3306', 'root', '123456');

3、函數注釋規范

 代碼如下 復制代碼 /**
 * 用用演示函數 //函數功能,決定是否使用
 *
 * @static
 * @access public
 * @param string $attributeName 屬性名稱 //函數參數,決定怎樣調用
 * @return string //函數的返回值,決定調用後怎麼處理
 */
public function demo($attributeName)
{
    $attributeName = 'abc';
    return $attributeName
}


四、Callback 回調函數

我們自定義一個函數A,但是我們不直接去調函數A,而是在函數B中去調用函數A,函數B通過接收函數A的名字和參數來實現對函數A的調用,函數A稱為回調函數。

 代碼如下 復制代碼

function A($x,$y)
{
    return $x*$y;
}
function B($a,$b,$fun)
{
    return $a+$b+$fun($a,$b);
}
echo B(2,3,"A");


PHP回調函數的實現方法

php提供了兩個內置函數call_user_func()和call_user_func_array()提供對回調函數的支持

 代碼如下 復制代碼

//mixed call_user_func_array 以數組的形式接收回調函數的參數
mixed call_user_func_array ( callable $callback , array $param_arr )
call_user_func_array('f1',array('A','B'));

//call_user_func的參數個數根據回調函數的參數來確定
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
call_user_func_array('f1','A','B');


實例:

 代碼如下 復制代碼

//普通全局函數
function f1($arg1,$arg2)
{
    echo $arg1."<br>".$arg2."<br>";
}

echo "通過call_user_func_array調用函數f1:<br>";
call_user_func_array('f1',array('A','B'));

echo "通過call_user_func調用函數f1:<br>";
call_user_func('f1','C','D');

//類
class myClass
{
    public $name;
    function show($arg1)
    {
        echo '參數名:'.$arg1."<br>";
        echo '對象中的成員名:'.$this->name;
        echo "<br>";
    }
    function show1($arg1,$arg2)
    { 
        echo $arg1."<br>".$arg2."<br>";
    }
    public static function show2($arg1,$arg2) 
    {
        echo $arg1."<br>".$arg2."<br>";
    }
}

echo "調用類中非靜態成員函數,該成員函數中有this調用了對象中的成員:<br>";
$a = new myClass;
$a->name = 'F';
call_user_func_array(array($a,'show'),array('E'));

echo "調用類中非靜態成員函數,該函數沒有調用對象中的成員,沒有this:<br>";
call_user_func_array(array('myClass','show1'),array('G','H'));

echo "調用類中靜態成員函數:<br>";
call_user_func_array(array('myClass','show2'),array('I','J'));

五、內部函數

在函數內部再聲明函數,目的是在函數內部調用,用來幫助外部函數完成一些子功能

copyright © 萬盛學電腦網 all rights reserved