您好,登錄后才能下訂單哦!
函數的定義:函數就是一段封裝好的代碼塊,可以隨時調用。在PHP中有兩種函數:自定義函數與系統函數。
自定義函數語法格式:
function 函數名稱([參數1,[參數2]....])
{
函數體(程序內容敘述)
[return 返回值;]
}
注:[]里的東西可有可無
自定義函數的名稱:
它是函數在程序代碼中的識別名稱,函數名可以是以字母或下劃線開頭后跟零個或多個字母、下劃線和數字的任何字符串。
符合變量名的命名規則
函數名不區分大小寫。
函數名不能重復,命名函數函數時不可使用已經聲明的函數(這個和變量的命名不同,變量可以覆蓋前一個變量名,而函數不可以),和PHP系統函數名稱。
函數名稱和變量名稱的區別:
變量名嚴格區分大小寫,函數名不區分大小寫。
參數(可以分為形參和實參):
所謂參數就是:用來把數值從函數外部傳入函數體中,并用來加以運算處理。
參數之間用“,”隔開,當函數不需要任何數值傳入時,可以省略參數。
形參:聲明函數時,函數名后面括號內的表達式稱為形參。
function table(形參1,形參2){}
實參:被調用函數名后面括號中的表達式稱為實參。
table(實參1,實參2);
實參和形參需要按順序對應傳遞數據。
function table2($rows,$cols,$color='yellow')
{
echo '<table border="1" bgcolor="'.$color.'">';
for($i = 0;$i < $rows;$i++){
echo '<tr>';
for($n = 0;$n <$cols;$n++){
echo '<td>'.($i*$rows+$n).'</td>';
}
echo '</tr>';
}
}
table2(10,10,'red');
注意:函數參數中,沒有默認值的放到前面,有默認值的放在參數列表中的后邊。
table2($rows,$cols,$color = 'yellow')
返回值:
當調用函數時需要它返回一些數值,那么就要在函數體中用return語句實現。
格式如下:
return 返回值;//返回值可以是變量也可以是一個表達式
exit(); //無返回值 void
return語句在函數體中使用時,有以下兩個作用:
return語句可以向函數調用者返回函數體中任意確定的值。
將程序控制權返回到調用者的作用域,即退出函數。在函數中如果執行了return語句,它后面的語句就不會被執行了。
說明:如果函數沒有返回值,就只能算是一個執行過程,只依靠函數做一些事情還不夠,有時更需要在程序腳本中
使用函數執行后的結果。由于變量的作用域的差異,調用函數的腳本程序不能直接使用函數體里面的信息,但可以通過關鍵字return向調用者傳遞數據。
echo與return:
echo直接輸出到瀏覽器,不能再加工,不能賦值給變量
return可以賦值給變量,變量是數據的臨時容器(return返回一個值,等待一個變量接收它)
注意: 如果函數有返回值,當函數執行完畢時就會將return后面的值返回到調用函數的位置處,這樣就可以把函數名稱當作函數返回的值使用。(這時調用函數時對ruturn后面的值是不管用的(retrun的值已經返回到調用函數的位置處,return以前的輸出還是可以照樣輸出),因為她已經變成某個值了無法用funName();輸出,需要echo funName()才可以輸出。)
<?php
header("content-type:text/html;charset=utf-8");
//在函數的聲明之前調用
echo show();
echo '<hr>';
function show()
{
echo 'ccc';
return 'aaa';
//return所在行之后的代碼不會執行
echo 111;
}
//函數的調用,不會將return后面的值返回
show();
echo '<hr>';
//return返回的值 需要一個變量來接收它
$result = show();
echo $result;
echo '<hr>';
//也可以直接輸出 函數名稱
echo show();
echo '<hr>';
輸出結果:
cccaaa
ccc
cccaaa
cccaaa
函數的調用:
格式:函數名();
說明:table();
不管是自定義函數還是系統函數,如果函數不被調用,就不會執行。
通過函數名稱去調用函數,并讓函數體的代碼運行,調用幾次函數體就會執行幾次。
在PHP中可以在函數的聲明之后調用,也可以在函數的聲明之前調用,還可以在函數中調用函數。
駝峰命名法:
function showInfo()
{
}
function ShowInfo()
{
}
判斷函數是否存在: function_exists()
if(function_exists('table')){
echo 'table';
}else{
echo 'table函數不存在,請先定義table函數';
}
PHP變量的范圍:
局部變量
全局變量
靜態變量
<?php
$username = 'shifang';
function stu()
{
$name = 'libai';
echo $name;
//無法調用外部的$username,而在函數體內也沒有聲明$username
10 echo $username;
echo 'xxxx';
}
stu();
//函數體外無法調用函數體內的變量
16.echo $name;
echo $username;
結果:
libai
Notice: Undefined variable: username in D:\xampp\htdocs\89\Exercise\2014-7-28 PHP function\007quanju.php on line 10
xxxx
Notice: Undefined variable: name in D:\xampp\htdocs\89\Exercise\2014-7-28 PHP function\007quanju.php on line 16
shifang
在PHP的頁面中聲明的變量,叫“全局變量”.
函數內的變量叫“局部變量”.
二者沒有半毛錢關系:函數內的變量,外部無法調用,函數外的變量,函數無法調用
(某戲班子到某學校唱戲,兩者的花名冊都不可相互調用)
靜態變量:
PHP支持聲明函數變量為靜態的(static)。
一個靜態變量在所有對該函數的調用之間共享,并且僅在腳本的執行期間函數第一次被調用時被初始化。
要聲明函數變量為靜態的用關鍵字static,通常,靜態變量的第一次使用時賦予一個初始值。
<?php
function tongji()
{
static $n = 0;
echo $n;
$n++;
}
tongji();
tongji();
tongji();
echo '<hr>';
function jishu()
{
$m = 0;
echo $m;
$m++;
}
jishu();
jishu();
jishu();
輸出結果:
0123
00000
函數內如何調用函數外的變量?
1、傳參
2、引用傳參---"&"
下邊的兩種方法不推薦使用,因為其破壞了函數的封裝性
3、聲明全局變量 global
function t2()
{
global $a;
echo $a;
}
t2();
4、超級全局變量,在頁面的任何部分,包括函數,方法等,都可以直接訪問
$GLOBALS
超級全局變量(9個):
$_GET //地址欄上獲得的值
$_POST //POST表單發送的數據
$_REQUEST //既有GET,也有POST的內容,需要在php.ini中配置
$_SESSION
$_COOKIE
$_FILES
$_ENV //服務器操作系統的環境變量,如操作系統,Linux,win ,mac,環境變量等等;容易暴露服務器信息,一般不允許顯示,需要在php.ini中配置
$_SERVER //獲取網站的域名,以及當前訪問的腳本,客戶端IP(REMOTE_ADDR,HTTP_X_FORWARD_FOR)
$GLOBALS //是對全局變量花名冊的一個別名,通過該變量,可以任意訪問全局變量
搜索如果禁用了$_ENV變量,還有什么辦法獲取環境信息?
<?php
//使用return
function show()
{
$username = 'dufu';
return $username;
}
//輸出dufu
echo show();
echo '<hr>';
$username = 'xiao';
echo $username;
echo '<hr>';
function getData()
{
return $GLOBALS['username'] = 'libai';
}
//無法輸出
getData();
echo '<hr>';
$result = getData();
echo $result;
echo '<hr>';
echo getData();
echo '<hr>';
//超全局變量,不僅可以獲取外邊的變量,還可以改變變量的值
echo $username;
echo '<hr>';
輸出結果:
dufu
xiaolibailibailibai
PHP函數的各種形式(分類):
常規參數函數
偽類型參數函數 mixed number callable | callback
默認參數函數 function table($rows,$cols=3,$color= 'red');
可變長度參數函數 func_get_args() func_get_arg(1) func_num_args();
引用參數函數 function mysort(&$arr){};
回調函數 usort(), uksort(),
遞歸函數
匿名函數
1、常規參數函數
格式說明:
string example(string name, int age, double height)
所謂的常規參數函數就是實參和形參應該個數相等,類型一致。
<?php
{function table2($rows,$cols,$color="yellow")
echo '<table border="1" bgcolor="'.$color.'">';
for($i = 0;$i < $rows;$i++){
echo '<tr>';
for($n = 0;$n <$cols;$n++){
echo '<td>'.($i*$rows+$n).'</td>';
}
echo '</tr>';
}
}
table2(10,10,'red');
2、偽類型參數函數
主要用于查看手冊時,查看各種需要的類型,在實際的代碼中很少用到,有這么概念就行,偽類型可以理解為什么類型都可以。
格式說明:
mixed funName(mixed $args) #在參數列表中出現類型使用 mixed 描述的參數
number funName(number $args) #在參數列表中出現類型使用 number 描述的參數
PHP中函數的每個參數,都可以為其傳遞任意類型的值。
PHP的偽類型,包括mixed(任意類型)、number(int ,float)、callback(函數名)三種。
3、默認參數函數
格式說明:mixed funName(string name[,string value[,int expire]]) #在參數列表中出現使用[ ]描述的參數
<?php
//一個函數:只要有一個參數有默認值,該函數就叫默認參數函數
//默認參數:有默認值的參數放在 參數列表 后面,前面的 形參個數 要求與 傳入實參 時的 個數和類型必須一致
function table($rows = 10,$cols = 10,$color = 'red')
{
echo '<table border="1" bgcolor="'.$color.'">';
for($i = 0; $i < $rows; $i++){
echo '<tr>';
for($n = 0; $n < $cols; $n++){
echo '<td>'.($i*$cols+$n).'</td>';
}
echo '</tr>';
}
echo '</table>';
}
table(3,3,'blue');
table();
4、可變長度參數函數
格式說明:
mixed funName(string arg1 [,string...]) #在參數列表中出現使用“...”描述的參數
使用默認參數函數適合實參個數少于形參的情況,而可變長度參數函數則適合實參個數多于形參的情況。
如果希望函數可以接受任意數量的參數,需要在函數中使用PHP系統提供的func_get_args()函數,它將所有傳遞個腳本函數的參數當作一個數組返回。
獲取所有傳入的參數:func_get_args();
獲取所有傳入參數的個數: func_num_args();
單獨獲取指定的參數: func_get_arg(n);
<?php
//可變長度參數函數:傳入的參數個數是不確定的
function show()
{
//獲取所有傳入的參數,并將其轉為一個數組返回
$arr = func_get_args();
//輸出的$arr為數組
print_r($arr);
//獲取所有傳入參數的個數
echo func_num_args();
//單獨獲取指定的參數,需要傳入參數的順序號,從0開始
echo func_get_arg(3);
}
show('a','n','x','y','z');
function getInfo(){
$num = func_num_args();
for($i = 0;$i < $num;$i++){
echo func_get_arg($i).'<br>';
}
}
getInfo('姓名:小二','年齡:18','aihao:nvkeguan','teshuaihao:hejiu');
輸出結果:
5
Array ( [0] => a [1] => n [2] => x [3] => y [4] => z )
y
姓名:小二
年齡:18
aihao:nvkeguan
teshuaihao:hejiu
5、引用參數函數
格式說明:void funName(array &arg) #在參數列表中出現使用 & 描述的函數
<?php
$arr = array(98,66,1,23,12,5);
echo '<pre>';
print_r($arr);
function show(&$crr){
for($i = 0;$i <4; $i++){
($crr[$i] += 5).'<br>';
}
}
//$crr = &$arr;$arr是數組所以無法輸出數組?
show($arr);
echo '<pre>';
print_r($arr);
echo '<hr>';
echo '<pre>';
sort($arr);
print_r($arr);
輸出結果:
Array
(
[0] => 98
[1] => 66
[2] => 1
[3] => 23
[4] => 12
[5] => 5
)
Array
(
[0] => 103
[1] => 71
[2] => 6
[3] => 28
[4] => 12
[5] => 5
)
Array
(
[0] => 5
[1] => 6
[2] => 12
[3] => 28
[4] => 71
[5] => 103
)
<?php
$var=100;
function testi($arg)
{
//局部變量無法使用全局變量,報錯
echo $var;
echo '<br>';
//傳參$var=100
echo $arg;
echo '<br>';
//改變局部變量的值,輸出200
$arg=200;
echo $arg;
}
testi($var);
//改變局部變量的值,不會影響全局變量
echo $var;
echo '<hr>';
function test(&$arg)
{
//局部變量無法使用全局變量,報錯
echo $var;
echo '<br>';
//傳參
echo $arg;
echo '<br>';
//改變局部變量的值,輸出200
$arg=200;
echo $arg;
}
test($var);
//改變局部變量,全局變量的值也被改變200
echo $var;
輸出結果:
Notice: Undefined variable: var in D:\xampp\htdocs\89\HomeWork\moxie\yinyon.php on line 7
100
200100
Notice: Undefined variable: var in D:\xampp\htdocs\89\HomeWork\moxie\yinyon.php on line 28
100
200200
6、回調參數函數
格式說明:
mixed funName( callback arg ) #在參數列表中使用偽類型 callback 描述
所謂回調函數,就是指調用函數時并不是傳遞一個標準的變量作為參數,而是將另一個函數作為參數傳遞到調用的函數中。
函數參數中,有一個參數值是另一個函數的函數名,那么這個函數就是回調函數
如果在函數的格式說明中,出現“callback”類型的參數,該函數就是回調函數。
callback也屬于PHP中偽類型的一種,說明函數的參數需要接受另一個函數作為實參。
使用回調函數的目的是可以將一段自己定義的功能傳到函數內部使用。
變量函數
變量函數也稱為可變函數。如果一個變量名后有圓括號,PHP將尋找與變量的值同名的函數,并且將嘗試執行它。
2使用變量函數聲明和應用回調函數
3借助call_user_func_array()函數自定義回調函數
格式說明:mixed call_user_func_array(callback function,array param_arr)
該函數有兩個參數,第一個參數因為使用偽類型callback,所以這個參數需要是一個字符串,表示要調用的函數名,第二個參數則是一個數組類型參數,表示參數列表,按照順序依次會傳遞給要調用的函數。
<?php
function fun($msg1,$msg2){
echo '$msg1='.$msg1.'<br>';
echo '$msg12='.$msg2;
}
call_user_func_array('fun',array('lamp','兄弟連'));
結果:
$msg1=lamp
$msg12=兄弟連
4靜態類函數和對象的方法回調
<?php
echo '<pre>';
$arr = [199,1,24,789,213,123];
usort($arr,'myfun');
function myfun($x,$y){
return $y-$x;
}
print_r($arr);
結果:
Array
(
[0] => 789
[1] => 213
[2] => 199
[3] => 123
[4] => 24
[5] => 1
)
<?php
$bianliang = 'myfun';
function myfun()
{
echo 'this is a function';
}
// myfun();
//$bianliang();
//自定義的回調函數
function show($func){
//myfun();
$func();
}
show('myfun');
結果:this is a function
7、遞歸函數
遞歸函數即自調用函數。
<?php
$n = 10;
function jianfa($x){
//執行遞減
$x--;
//輸出傳入的參數值
echo $x;
//如果$a大于零就繼續調用函數本身
if($x > 0){
jianfa($x);
}else{
//如果不大于0就輸出字符串
echo '<=====>';
}
//輸出$a的值
echo $x;
}
jianfa($n);
結果:
9876543210<=======>0123456789
8、匿名函數
1、它沒有函數名
2,可以賦值給一個變量 $bianliang = function(參數)use(變量){//函數體};
3,所有回調函數中,回調參數位置都可以用匿名函數替代。
4,可以使用use直接調用外部的變量($arr),如果引用外部變量(&$arr),在內部可以更改外部的變量值
<?php
//1,第一種用法:將匿名函數數賦值給一個變量,調用的時候 $變量名(參數..);
$show = function($a){
echo '代碼的處理';
echo $a;
};
$n = 15;
$show($n);
<?php
$color = 'red';
$table = function($rows,$cols)use(&$color){
$color = 'green';
echo '<table border="1" bgcolor="'.$color.'">';
for($i = 0;$i < $rows;$i++){
echo '<tr>';
for($n = 0;$n < $cols;$n++){
echo '<td>'.($i*$cols+$n).'</td>';
}
echo '</tr>';
}
echo '</table>';
};
$table(10,10);
echo $color;
結果:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |
green
&符,將內部的變量值把外部的變量改變
使用自定義函數庫:
include();
require();
include(); require(); 語句是語言結構,不是真正的函數
<?php
//包含文件到當前的位置。而 include 只產生警告(E_WARNING),腳本會繼續運行。
include '04table.php';
//包含文件到當前的位置。require 在出錯時產生 E_COMPILE_ERROR 級別的錯誤。
require('04table.php');
echo table(5,5);
inculde_once();
require_once();
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。