函數(shù)是一門程序中不可少的一個(gè)重要的東西,很多東西我們會(huì)做成函數(shù)這樣可以方便重復(fù)調(diào)用了,下面本文章重點(diǎn)就是介紹函數(shù)php函數(shù)用法.
一、函數(shù)的聲明
1、語法結(jié)構(gòu),代碼如下:
- function 函數(shù)名 (參數(shù)列表)
- {
- 函數(shù)體; //可選
- 返回值; //return可選
- }
參數(shù)列表用逗號隔開,勿遺漏$變量符號,函數(shù)名不區(qū)分大小寫,規(guī)則與變量一致,函數(shù)調(diào)用才執(zhí)行,可先調(diào)用后聲明,函數(shù)名不能重名,包括系統(tǒng)函數(shù).
2、函數(shù)調(diào)用,代碼如下:
- function sum($x,$y) //形參:在聲明函數(shù)時(shí)聲明的參數(shù)
- {
- // $x = 1; //如果在函數(shù)內(nèi)對參數(shù)賦值,則會(huì)覆蓋實(shí)參。
- // $y = 2; //開源軟件:Vevb.com
- $sum = 0;
- $sum = $x + $y;
- return $sum; //執(zhí)行到return函數(shù)結(jié)束,后面不再執(zhí)行
- }
- sum();
- sum(2,2); //實(shí)參:在調(diào)用函數(shù)時(shí)傳遞給形參的數(shù)值
- echo sum(2,2); //通過return返回?cái)?shù)據(jù)可作為值使用
二、函數(shù)中的變量
1、變量范圍
局部變量:函數(shù)內(nèi)部聲明與使用的變量
全局變量:在函數(shù)外聲明,腳本任何地方均可以使用
Tips:在PHP函數(shù)中使用全局變量,要通過global關(guān)鍵字將這個(gè)全局變量包含到函數(shù)中才能使用,代碼如下:
- $a = 1;
- $b = 2;
- function demo($a = '')
- {
- //global 須放在前面
- //global $a,$b global 可包含多個(gè)全局變量
- //$GLOBALS['a'] //聲明全局變量 方法二
- global $a;
- $a += 5;
- echo $a;
- }
- demo();
2、PHP靜態(tài)變量
靜態(tài)變量可以在同一個(gè)函數(shù)中多次調(diào)用中共用,靜態(tài)變量只能在函數(shù)或類中聲明,不能在全局聲明,代碼如下:
- function demo($a = '')
- {
- static $a = 0; //定義靜態(tài)變量
- $a++;
- echo "$a <br>";
- }
- demo(); //輸出1
- demo(); //輸出2
3、變量函數(shù),代碼如下:
- $var = 'hello'; //變量名后面右括號,就尋找與變量值同名的函數(shù)
- $var(); //等價(jià)于 hello();
三、函數(shù)分類及聲明
1、函數(shù)分類,代碼如下:
- //常規(guī)函數(shù)
- bool copy(string source,string dest)
- //帶mixed,表示可以傳任何類型的數(shù)據(jù)
- bool chown(string filename,mixed user)
- //帶&參數(shù)的函數(shù),這個(gè)參數(shù)只能是變量,變量值是動(dòng)態(tài)的
- //對數(shù)組進(jìn)行排序,數(shù)組的索引保持和單元的關(guān)聯(lián)
- bool arsort ( array &$array [, int $sort_flags ] )
- $fruits = array('a', 'c', 'b');
- arsort($fruits);
- var_dump($fruits);
- //默認(rèn)函數(shù),即帶[]中括號的函數(shù),表示參數(shù)可選,若沒有傳值則使用默認(rèn)值
- //如果調(diào)用沒有賦值,又沒有初值則出現(xiàn)警告
- function demo($a=1,$b=2)
- {
- #code
- }
- demo();
- //帶有...參數(shù)的函數(shù),表示可以傳任意多個(gè)參數(shù)
- //在數(shù)組開頭插入一個(gè)或多個(gè)單元
- int array_unshift ( array &$array , mixed $var [, mixed $... ] )
2、聲明多個(gè)參數(shù)函數(shù),代碼如下:
- function Test()
- {
- echo func_num_args();
- }
- Test('a','b','c'); // 3
- func_get_arg():返回參數(shù)列表中的第N個(gè)參數(shù)
- function Test()
- {
- echo func_get_arg('1');
- }
- Test('a','b','c'); //b
- //使用實(shí)例:
- function cls_mysql()
- {
- $mysql = func_get_args();
- $conn = mysql_connect($mysql['0'], $mysql['1'], $mysql['2']);
- }
- cls_mysql('localhost:3306', 'root', '123456');
3、函數(shù)注釋規(guī)范,代碼如下:
- /**
- * 用用演示函數(shù) //函數(shù)功能,決定是否使用
- *
- * @static
- * @access public
- * @param string $attributeName 屬性名稱 //函數(shù)參數(shù),決定怎樣調(diào)用
- * @return string //函數(shù)的返回值,決定調(diào)用后怎么處理
- */
- public function demo($attributeName)
- {
- $attributeName = 'abc';
- return $attributeName
- }
四、Callback 回調(diào)函數(shù)
我們自定義一個(gè)函數(shù)A,但是我們不直接去調(diào)函數(shù)A,而是在函數(shù)B中去調(diào)用函數(shù)A,函數(shù)B通過接收函數(shù)A的名字和參數(shù)來實(shí)現(xiàn)對函數(shù)A的調(diào)用,函數(shù)A稱為回調(diào)函數(shù),代碼如下:
- function A($x,$y)
- {
- return $x*$y;
- }
- function B($a,$b,$fun)
- {
- return $a+$b+$fun($a,$b);
- }
- echo B(2,3,"A");
PHP回調(diào)函數(shù)的實(shí)現(xiàn)方法
php提供了兩個(gè)內(nèi)置函數(shù)call_user_func()和call_user_func_array()提供對回調(diào)函數(shù)的支持,代碼如下:
- //mixed call_user_func_array 以數(shù)組的形式接收回調(diào)函數(shù)的參數(shù)
- mixed call_user_func_array ( callable $callback , array $param_arr )
- call_user_func_array('f1',array('A','B'));
- //call_user_func的參數(shù)個(gè)數(shù)根據(jù)回調(diào)函數(shù)的參數(shù)來確定
- mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
- call_user_func_array('f1','A','B');
實(shí)例代碼如下:
- //普通全局函數(shù)
- function f1($arg1,$arg2)
- {
- echo $arg1."<br>".$arg2."<br>";
- }
- echo "通過call_user_func_array調(diào)用函數(shù)f1:<br>";
- call_user_func_array('f1',array('A','B'));
- echo "通過call_user_func調(diào)用函數(shù)f1:<br>";
- call_user_func('f1','C','D');
- //類
- class myClass
- {
- public $name;
- function show($arg1)
- {
- echo '參數(shù)名:'.$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 "調(diào)用類中非靜態(tài)成員函數(shù),該成員函數(shù)中有this調(diào)用了對象中的成員:<br>";
- $a = new myClass;
- $a->name = 'F';
- call_user_func_array(array($a,'show'),array('E'));
- echo "調(diào)用類中非靜態(tài)成員函數(shù),該函數(shù)沒有調(diào)用對象中的成員,沒有this:<br>";
- call_user_func_array(array('myClass','show1'),array('G','H'));
- echo "調(diào)用類中靜態(tài)成員函數(shù):<br>";
- call_user_func_array(array('myClass','show2'),array('I','J'));
五、內(nèi)部函數(shù)
在函數(shù)內(nèi)部再聲明函數(shù),目的是在函數(shù)內(nèi)部調(diào)用,用來幫助外部函數(shù)完成一些子功能.
新聞熱點(diǎn)
疑難解答