溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP的函數(shù)應(yīng)用

發(fā)布時(shí)間:2020-07-21 20:22:49 來(lái)源:網(wǎng)絡(luò) 閱讀:690 作者:sxsdlxw 欄目:web開發(fā)

函數(shù)的定義:函數(shù)就是一段封裝好的代碼塊,可以隨時(shí)調(diào)用。在PHP中有兩種函數(shù):自定義函數(shù)系統(tǒng)函數(shù)。

自定義函數(shù)語(yǔ)法格式:

function  函數(shù)名稱([參數(shù)1,[參數(shù)2]....])

{

函數(shù)體(程序內(nèi)容敘述)

[return 返回值;]

}

注:[]里的東西可有可無(wú)

自定義函數(shù)的名稱:


  1. 它是函數(shù)在程序代碼中的識(shí)別名稱,函數(shù)名可以是以字母或下劃線開頭后跟零個(gè)或多個(gè)字母、下劃線和數(shù)字的任何字符串。

  2. 符合變量名的命名規(guī)則

  3. 函數(shù)名不區(qū)分大小寫。

  4. 函數(shù)名不能重復(fù),命名函數(shù)函數(shù)時(shí)不可使用已經(jīng)聲明的函數(shù)(這個(gè)和變量的命名不同,變量可以覆蓋前一個(gè)變量名,而函數(shù)不可以),和PHP系統(tǒng)函數(shù)名稱。

函數(shù)名稱和變量名稱的區(qū)別:

變量名嚴(yán)格區(qū)分大小寫,函數(shù)名不區(qū)分大小寫。


參數(shù)(可以分為形參和實(shí)參):

所謂參數(shù)就是:用來(lái)把數(shù)值從函數(shù)外部傳入函數(shù)體中,并用來(lái)加以運(yùn)算處理。

參數(shù)之間用“,”隔開,當(dāng)函數(shù)不需要任何數(shù)值傳入時(shí),可以省略參數(shù)。

形參:聲明函數(shù)時(shí),函數(shù)名后面括號(hào)內(nèi)的表達(dá)式稱為形參。

function table(形參1,形參2){}

實(shí)參:被調(diào)用函數(shù)名后面括號(hào)中的表達(dá)式稱為實(shí)參。

table(實(shí)參1,實(shí)參2);

實(shí)參和形參需要按順序?qū)?yīng)傳遞數(shù)據(jù)。


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');



注意:函數(shù)參數(shù)中,沒有默認(rèn)值的放到前面,有默認(rèn)值的放在參數(shù)列表中的后邊。

table2($rows,$cols,$color = 'yellow')


返回值:

當(dāng)調(diào)用函數(shù)時(shí)需要它返回一些數(shù)值,那么就要在函數(shù)體中用return語(yǔ)句實(shí)現(xiàn)。

格式如下:

return 返回值;//返回值可以是變量也可以是一個(gè)表達(dá)式

exit();        //無(wú)返回值 void

return語(yǔ)句在函數(shù)體中使用時(shí),有以下兩個(gè)作用:


  1. return語(yǔ)句可以向函數(shù)調(diào)用者返回函數(shù)體中任意確定的值。

  2. 將程序控制權(quán)返回到調(diào)用者的作用域,即退出函數(shù)。在函數(shù)中如果執(zhí)行了return語(yǔ)句,它后面的語(yǔ)句就不會(huì)被執(zhí)行了。


說明:如果函數(shù)沒有返回值,就只能算是一個(gè)執(zhí)行過程,只依靠函數(shù)做一些事情還不夠,有時(shí)更需要在程序腳本中

使用函數(shù)執(zhí)行后的結(jié)果。由于變量的作用域的差異,調(diào)用函數(shù)的腳本程序不能直接使用函數(shù)體里面的信息,但可以通過關(guān)鍵字return向調(diào)用者傳遞數(shù)據(jù)。

echo與return:

echo直接輸出到瀏覽器,不能再加工,不能賦值給變量

return可以賦值給變量,變量是數(shù)據(jù)的臨時(shí)容器(return返回一個(gè)值,等待一個(gè)變量接收它)

注意:    如果函數(shù)有返回值,當(dāng)函數(shù)執(zhí)行完畢時(shí)就會(huì)將return后面的值返回到調(diào)用函數(shù)的位置處,這樣就可以把函數(shù)名稱當(dāng)作函數(shù)返回的值使用。(這時(shí)調(diào)用函數(shù)時(shí)對(duì)ruturn后面的值是不管用的(retrun的值已經(jīng)返回到調(diào)用函數(shù)的位置處,return以前的輸出還是可以照樣輸出),因?yàn)樗呀?jīng)變成某個(gè)值了無(wú)法用funName();輸出,需要echo funName()才可以輸出。)



<?php

header("content-type:text/html;charset=utf-8");

//在函數(shù)的聲明之前調(diào)用
echo show();
echo '<hr>';

function show()
{
    echo 'ccc';

    return 'aaa';

    //return所在行之后的代碼不會(huì)執(zhí)行
    echo 111;
}

//函數(shù)的調(diào)用,不會(huì)將return后面的值返回
show();
echo '<hr>';

//return返回的值 需要一個(gè)變量來(lái)接收它
$result = show();
echo $result;
echo '<hr>';


//也可以直接輸出 函數(shù)名稱
echo show();
echo '<hr>';



輸出結(jié)果:

cccaaa


ccc


cccaaa


cccaaa


函數(shù)的調(diào)用:

格式:函數(shù)名();

說明:table();


  1. 不管是自定義函數(shù)還是系統(tǒng)函數(shù),如果函數(shù)不被調(diào)用,就不會(huì)執(zhí)行。

  2. 通過函數(shù)名稱去調(diào)用函數(shù),并讓函數(shù)體的代碼運(yùn)行,調(diào)用幾次函數(shù)體就會(huì)執(zhí)行幾次。

  3. 在PHP中可以在函數(shù)的聲明之后調(diào)用,也可以在函數(shù)的聲明之前調(diào)用,還可以在函數(shù)中調(diào)用函數(shù)。


駝峰命名法:


function showInfo()
{

}

function ShowInfo()
{

}


判斷函數(shù)是否存在: function_exists()

if(function_exists('table')){
    echo 'table';
}else{
    echo 'table函數(shù)不存在,請(qǐng)先定義table函數(shù)';
}


PHP變量的范圍:


  • 局部變量

  • 全局變量

  • 靜態(tài)變量




<?php
$username = 'shifang';

function stu()
{
    $name = 'libai';
    echo $name;

    //無(wú)法調(diào)用外部的$username,而在函數(shù)體內(nèi)也沒有聲明$username
10   echo $username;
    echo 'xxxx';
}

stu();

//函數(shù)體外無(wú)法調(diào)用函數(shù)體內(nèi)的變量
16.echo $name;
echo $username;


結(jié)果:

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的頁(yè)面中聲明的變量,叫“全局變量”.

函數(shù)內(nèi)的變量叫“局部變量”.

二者沒有半毛錢關(guān)系:函數(shù)內(nèi)的變量,外部無(wú)法調(diào)用,函數(shù)外的變量,函數(shù)無(wú)法調(diào)用

(某戲班子到某學(xué)校唱戲,兩者的花名冊(cè)都不可相互調(diào)用)

靜態(tài)變量:


  •  PHP支持聲明函數(shù)變量為靜態(tài)的(static)。

  • 一個(gè)靜態(tài)變量在所有對(duì)該函數(shù)的調(diào)用之間共享,并且僅在腳本的執(zhí)行期間函數(shù)第一次被調(diào)用時(shí)被初始化。

  • 要聲明函數(shù)變量為靜態(tài)的用關(guān)鍵字static,通常,靜態(tài)變量的第一次使用時(shí)賦予一個(gè)初始值。




<?php
function tongji()
{
    static $n = 0;
    echo $n;
    $n++;
}
tongji();
tongji();
tongji();
echo '<hr>';

function jishu()
{
    $m = 0;
    echo $m;
    $m++;
}
jishu();
jishu();
jishu();

輸出結(jié)果:

0123


00000



函數(shù)內(nèi)如何調(diào)用函數(shù)外的變量?

1、傳參

2、引用傳參---"&"

下邊的兩種方法不推薦使用,因?yàn)槠淦茐牧撕瘮?shù)的封裝性

3、聲明全局變量 global

function t2()

{
global $a;
echo $a;
}
t2();


4、超級(jí)全局變量,在頁(yè)面的任何部分,包括函數(shù),方法等,都可以直接訪問

$GLOBALS

超級(jí)全局變量(9個(gè)):


  1. $_GET //地址欄上獲得的值

  2. $_POST    //POST表單發(fā)送的數(shù)據(jù)

  3. $_REQUEST    //既有GET,也有POST的內(nèi)容,需要在php.ini中配置

  4. $_SESSION

  5. $_COOKIE

  6. $_FILES

  7. $_ENV    //服務(wù)器操作系統(tǒng)的環(huán)境變量,如操作系統(tǒng),Linux,win ,mac,環(huán)境變量等等;容易暴露服務(wù)器信息,一般不允許顯示,需要在php.ini中配置

  8. $_SERVER    //獲取網(wǎng)站的域名,以及當(dāng)前訪問的腳本,客戶端IP(REMOTE_ADDR,HTTP_X_FORWARD_FOR)

  9. $GLOBALS     //是對(duì)全局變量花名冊(cè)的一個(gè)別名,通過該變量,可以任意訪問全局變量



搜索如果禁用了$_ENV變量,還有什么辦法獲取環(huán)境信息?




<?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';
}

//無(wú)法輸出
getData();
echo '<hr>';

$result = getData();
echo $result;
echo '<hr>';

echo getData();
echo '<hr>';

//超全局變量,不僅可以獲取外邊的變量,還可以改變變量的值
echo $username;
echo '<hr>';


輸出結(jié)果:

dufu


xiaolibailibailibai



PHP函數(shù)的各種形式(分類):


  1. 常規(guī)參數(shù)函數(shù)

  2. 偽類型參數(shù)函數(shù) mixed number  callable | callback

  3. 默認(rèn)參數(shù)函數(shù)    function table($rows,$cols=3,$color= 'red');

  4. 可變長(zhǎng)度參數(shù)函數(shù) func_get_args() func_get_arg(1) func_num_args();

  5. 引用參數(shù)函數(shù)    function mysort(&$arr){};

  6. 回調(diào)函數(shù)    usort(),    uksort(),

  7. 遞歸函數(shù)

  8. 匿名函數(shù)


1、常規(guī)參數(shù)函數(shù)

格式說明:

string    example(string name, int age, double height)


所謂的常規(guī)參數(shù)函數(shù)就是實(shí)參和形參應(yīng)該個(gè)數(shù)相等,類型一致。



<?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、偽類型參數(shù)函數(shù)

主要用于查看手冊(cè)時(shí),查看各種需要的類型,在實(shí)際的代碼中很少用到,有這么概念就行,偽類型可以理解為什么類型都可以。

格式說明:

mixed funName(mixed $args)        #在參數(shù)列表中出現(xiàn)類型使用 mixed 描述的參數(shù)

number funName(number $args)      #在參數(shù)列表中出現(xiàn)類型使用 number 描述的參數(shù)


PHP中函數(shù)的每個(gè)參數(shù),都可以為其傳遞任意類型的值。

PHP的偽類型,包括mixed(任意類型)、number(int ,float)、callback(函數(shù)名)三種。

3、默認(rèn)參數(shù)函數(shù)

格式說明:mixed funName(string name[,string value[,int expire]])        #在參數(shù)列表中出現(xiàn)使用[ ]描述的參數(shù)


<?php


//一個(gè)函數(shù):只要有一個(gè)參數(shù)有默認(rèn)值,該函數(shù)就叫默認(rèn)參數(shù)函數(shù)
//默認(rèn)參數(shù):有默認(rèn)值的參數(shù)放在 參數(shù)列表 后面,前面的 形參個(gè)數(shù) 要求與 傳入實(shí)參 時(shí)的 個(gè)數(shù)和類型必須一致

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、可變長(zhǎng)度參數(shù)函數(shù)

格式說明:

mixed funName(string arg1 [,string...])      #在參數(shù)列表中出現(xiàn)使用“...”描述的參數(shù)

使用默認(rèn)參數(shù)函數(shù)適合實(shí)參個(gè)數(shù)少于形參的情況,而可變長(zhǎng)度參數(shù)函數(shù)則適合實(shí)參個(gè)數(shù)多于形參的情況。

如果希望函數(shù)可以接受任意數(shù)量的參數(shù),需要在函數(shù)中使用PHP系統(tǒng)提供的func_get_args()函數(shù),它將所有傳遞個(gè)腳本函數(shù)的參數(shù)當(dāng)作一個(gè)數(shù)組返回。

獲取所有傳入的參數(shù):func_get_args();

獲取所有傳入?yún)?shù)的個(gè)數(shù):    func_num_args();

單獨(dú)獲取指定的參數(shù):    func_get_arg(n);


<?php

//可變長(zhǎng)度參數(shù)函數(shù):傳入的參數(shù)個(gè)數(shù)是不確定的
function show()
{
    //獲取所有傳入的參數(shù),并將其轉(zhuǎn)為一個(gè)數(shù)組返回
    $arr = func_get_args();

 
    //輸出的$arr為數(shù)組  

     print_r($arr);


    //獲取所有傳入?yún)?shù)的個(gè)數(shù)
    echo func_num_args();

    
    //單獨(dú)獲取指定的參數(shù),需要傳入?yún)?shù)的順序號(hào),從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');


輸出結(jié)果:

5

Array ( [0] => a [1] => n [2] => x [3] => y [4] => z )

y

姓名:小二

年齡:18
aihao:nvkeguan
teshuaihao:hejiu



5、引用參數(shù)函數(shù)

格式說明:void funName(array &arg)        #在參數(shù)列表中出現(xiàn)使用 & 描述的函數(shù)


<?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是數(shù)組所以無(wú)法輸出數(shù)組?
show($arr);


echo '<pre>';
print_r($arr);

echo '<hr>';
echo '<pre>';
sort($arr);
print_r($arr);


輸出結(jié)果:

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)
{
    //局部變量無(wú)法使用全局變量,報(bào)錯(cuò)
    echo $var;
    echo '<br>';

    //傳參$var=100
    echo $arg;
    echo '<br>';
    //改變局部變量的值,輸出200
    $arg=200;
    echo $arg;
}

testi($var);

//改變局部變量的值,不會(huì)影響全局變量
echo $var;

echo '<hr>';

function test(&$arg)
{
    //局部變量無(wú)法使用全局變量,報(bào)錯(cuò)
    echo $var;
    echo '<br>';

    //傳參
    echo $arg;
    echo '<br>';
    //改變局部變量的值,輸出200
    $arg=200;
    echo $arg;
}

test($var);

//改變局部變量,全局變量的值也被改變200
echo $var;

輸出結(jié)果:

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、回調(diào)參數(shù)函數(shù)

格式說明:

mixed funName( callback arg )            #在參數(shù)列表中使用偽類型 callback 描述


所謂回調(diào)函數(shù),就是指調(diào)用函數(shù)時(shí)并不是傳遞一個(gè)標(biāo)準(zhǔn)的變量作為參數(shù),而是將另一個(gè)函數(shù)作為參數(shù)傳遞到調(diào)用的函數(shù)中。

函數(shù)參數(shù)中,有一個(gè)參數(shù)值是另一個(gè)函數(shù)的函數(shù)名,那么這個(gè)函數(shù)就是回調(diào)函數(shù)

如果在函數(shù)的格式說明中,出現(xiàn)“callback”類型的參數(shù),該函數(shù)就是回調(diào)函數(shù)。

callback也屬于PHP中偽類型的一種,說明函數(shù)的參數(shù)需要接受另一個(gè)函數(shù)作為實(shí)參。

使用回調(diào)函數(shù)的目的是可以將一段自己定義的功能傳到函數(shù)內(nèi)部使用。


  1. 變量函數(shù)

變量函數(shù)也稱為可變函數(shù)。如果一個(gè)變量名后有圓括號(hào),PHP將尋找與變量的值同名的函數(shù),并且將嘗試執(zhí)行它。

  1. 2使用變量函數(shù)聲明和應(yīng)用回調(diào)函數(shù)

  2. 3借助call_user_func_array()函數(shù)自定義回調(diào)函數(shù)

    1. 格式說明:mixed call_user_func_array(callback function,array param_arr)

    2. 該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)因?yàn)槭褂脗晤愋蚦allback,所以這個(gè)參數(shù)需要是一個(gè)字符串,表示要調(diào)用的函數(shù)名,第二個(gè)參數(shù)則是一個(gè)數(shù)組類型參數(shù),表示參數(shù)列表,按照順序依次會(huì)傳遞給要調(diào)用的函數(shù)。

<?php

function fun($msg1,$msg2){
    echo '$msg1='.$msg1.'<br>';
    echo '$msg12='.$msg2;
    
}

call_user_func_array('fun',array('lamp','兄弟連'));

結(jié)果:

$msg1=lamp
$msg12=兄弟連



  1. 4靜態(tài)類函數(shù)和對(duì)象的方法回調(diào)



<?php
echo '<pre>';
$arr = [199,1,24,789,213,123];
usort($arr,'myfun');
function myfun($x,$y){
    return $y-$x;
}
print_r($arr);


結(jié)果:
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();

//自定義的回調(diào)函數(shù)
function show($func){
    //myfun();
    $func();
}
show('myfun');

結(jié)果:this is a function




7、遞歸函數(shù)

遞歸函數(shù)即自調(diào)用函數(shù)。

<?php$n = 10;
function jianfa($x){
   //執(zhí)行遞減
    $x--;
    //輸出傳入的參數(shù)值
    echo $x;
    //如果$a大于零就繼續(xù)調(diào)用函數(shù)本身
    if($x > 0){
        jianfa($x);
    }else{
      //如果不大于0就輸出字符串
       echo '<=====>';
    }
    //輸出$a的值
    echo $x;
}
jianfa($n);

結(jié)果:

9876543210<=======>0123456789



PHP的函數(shù)應(yīng)用

8、匿名函數(shù)


1、它沒有函數(shù)名

2,可以賦值給一個(gè)變量  $bianliang = function(參數(shù))use(變量){//函數(shù)體};

3,所有回調(diào)函數(shù),回調(diào)參數(shù)位置都可以用匿名函數(shù)替代。

4,可以使用use直接調(diào)用外部的變量($arr),如果引用外部變量(&$arr),在內(nèi)部可以更改外部的變量值


<?php

//1,第一種用法:將匿名函數(shù)數(shù)賦值給一個(gè)變量,調(diào)用的時(shí)候  $變量名(參數(shù)..);
$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;

結(jié)果:

0123456789
10111213141516171819
20212223242526272829
30313233343536373839
40414243444546474849
50515253545556575859
60616263646566676869
70717273747576777879
80818283848586878889
90919293949596979899

green

&符,將內(nèi)部的變量值把外部的變量改變




使用自定義函數(shù)庫(kù):

include();

require();

include(); require(); 語(yǔ)句是語(yǔ)言結(jié)構(gòu),不是真正的函數(shù)

<?php

//包含文件到當(dāng)前的位置。而 include 只產(chǎn)生警告(E_WARNING),腳本會(huì)繼續(xù)運(yùn)行。 
include '04table.php';

//包含文件到當(dāng)前的位置。require 在出錯(cuò)時(shí)產(chǎn)生 E_COMPILE_ERROR 級(jí)別的錯(cuò)誤。
require('04table.php');
echo table(5,5);



inculde_once();

require_once();






向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI