PHP 菜鳥教程

PHP 高級教程

PHP & MySQL

PHP 參考手冊

PHP 函數(shù)

在本教程中,您將學(xué)習(xí)如何在PHP中創(chuàng)建自己的自定義函數(shù)。

PHP 內(nèi)置函數(shù)

函數(shù)是執(zhí)行特定任務(wù)的獨(dú)立代碼塊。

PHP有一個巨大的集合內(nèi)置函數(shù),你可以在你的PHP腳本中直接調(diào)用執(zhí)行特定的任務(wù),如:gettype(),print_r(),var_dump等。

請查看PHP參考部分,以獲得有用的PHP內(nèi)置函數(shù)的完整列表。

PHP 用戶定義的函數(shù)

除了內(nèi)置函數(shù),PHP還允許您定義自己的函數(shù)。這是創(chuàng)建執(zhí)行特定任務(wù)的可重用代碼包的一種方法,并且可以與主程序分開保存和維護(hù)。以下是使用函數(shù)的一些優(yōu)點(diǎn):

  • 函數(shù)減少了程序中代碼的重復(fù) - 函數(shù)允許您將常用的代碼塊提取到單個組件中?,F(xiàn)在,您可以通過在腳本中的任何位置調(diào)用此函數(shù)來執(zhí)行相同的任務(wù),而不必反復(fù)復(fù)制和粘貼相同的代碼塊。

  • 函數(shù)使代碼的維護(hù)更加容易 - 由于一次創(chuàng)建函數(shù)可以多次使用,因此在函數(shù)內(nèi)部進(jìn)行的任何更改都會在所有位置自動實(shí)現(xiàn),而無需修改多個文件。

  • 通過函數(shù)可以更輕松地消除錯誤 - 將程序細(xì)分為函數(shù)時,如果發(fā)生任何錯誤,您將確切知道是哪個函數(shù)導(dǎo)致了錯誤以及在哪里可以找到它。因此,修復(fù)錯誤變得容易得多。

  • 可以在其他應(yīng)用程序中重用功能 - 由于函數(shù)與腳本的其余部分是分開的,因此僅通過包含包含這些函數(shù)的php文件,就可以在其他應(yīng)用程序中輕松重復(fù)使用相同的功能。

下一節(jié)將向您展示如何輕松地在PHP中定義自己的函數(shù)。

創(chuàng)建和調(diào)用函數(shù)

創(chuàng)建自定義函數(shù)的基本語法可以給出:

function functionName(){ 
    //要執(zhí)行的代碼
}

用戶定義函數(shù)的聲明以單詞function開頭,后跟要創(chuàng)建的函數(shù)的名稱,再后跟括號,即(),最后將函數(shù)的代碼放在大括號之間{ }。

這是一個用戶定義函數(shù)的簡單示例,其中顯示了今天的日期:

<?php
//定義函數(shù)
function whatIsToday(){
    echo "Today is " . date('l', mktime());
}
//調(diào)用函數(shù)
whatIsToday();
?>
測試看看?/?

注意:函數(shù)名稱必須以字母或下劃線字符開頭,而不以數(shù)字開頭,還可以選擇后面跟有更多字母,數(shù)字或下劃線字符。函數(shù)名稱不區(qū)分大小寫。

帶參數(shù)的函數(shù)

您可以在定義函數(shù)以在運(yùn)行時接受輸入值時指定參數(shù)。 參數(shù)的工作方式類似于函數(shù)中的占位符變量;它們在運(yùn)行時被調(diào)用時提供給函數(shù)的值(稱為參數(shù))替換。

function myFunc($oneParameter,$anotherParameter){ 
    //要執(zhí)行的代碼
}

您可以根據(jù)需要定義任意多個參數(shù)。 但是,對于您指定的每個參數(shù),在調(diào)用函數(shù)時需要將相應(yīng)的參數(shù)傳遞給該函數(shù)。

以下示例中的getSum()函數(shù)將兩個整數(shù)值作為參數(shù),只需將它們加在一起,然后在瀏覽器中顯示結(jié)果。

<?php
//定義函數(shù)
function getSum($num1, $num2){
  $sum = $num1 + $num2;
  echo "兩個數(shù)字$num1和$num2的和是 : $sum";
}
 
//調(diào)用函數(shù)
getSum(10, 20);
?>
測試看看?/?

上面代碼的輸出將是:

兩個數(shù)字10和20的和是 : 30

提示:參數(shù)是您傳遞給函數(shù)的值,參數(shù)是函數(shù)中接收參數(shù)的變量。但是,在通常用法中,這些術(shù)語是可以互換的,即參數(shù)是自變量。

具有可選參數(shù)和默認(rèn)值的函數(shù)

您也可以創(chuàng)建帶有可選參數(shù)的函數(shù) - 只需插入?yún)?shù)名稱,后跟等號(=),然后是默認(rèn)值,如下所示。

<?php
//定義函數(shù)
function customFont($font, $size=1.5){
    echo "<p style=\"font-family: $font; font-size: {$size}em;\">Hello, world!</p>";
}
 
//調(diào)用函數(shù)
customFont("Arial", 2);
customFont("Times", 3);
customFont("Courier");
?>
測試看看?/?

正如您可以看到的,對 customFont ()的第三個調(diào)用不包括第二個參數(shù)。這將導(dǎo)致 PHP 引擎使用 $size 參數(shù)的默認(rèn)值,即1.5。

從函數(shù)返回值

函數(shù)可以使用return語句將值返回給調(diào)用該函數(shù)的腳本。該值可以是任何類型,包括數(shù)組和對象。

<?php
//定義函數(shù)
function getSum($num1, $num2){
    $total = $num1 + $num2;
    return $total;
}
 
//打印返回值
echo getSum(5, 10); // 輸出: 15
?>
測試看看?/?

一個函數(shù)不能返回多個值。但是,您可以通過返回一個數(shù)組來獲得類似的結(jié)果,如以下示例所示。

<?php
//定義函數(shù)
function divideNumbers($dividend, $divisor){
    $quotient = $dividend / $divisor;
    $array = array($dividend, $divisor, $quotient);
    return $array;
}
 
//將變量作為數(shù)組進(jìn)行賦值
list($dividend, $divisor, $quotient) = divideNumbers(10, 2);
echo $dividend;  // 輸出: 10
echo $divisor;   // 輸出: 2
echo $quotient;  // 輸出: 5
?>
測試看看?/?

通過引用將參數(shù)傳遞給函數(shù)

在PHP中,有兩種方式可以將參數(shù)傳遞給函數(shù):按值傳遞和通過引用傳遞。 默認(rèn)情況下,函數(shù)參數(shù)按值傳遞,因此如果函數(shù)內(nèi)的參數(shù)值發(fā)生更改,它不會受到函數(shù)外部的影響。 但是,要允許函數(shù)修改其參數(shù),它們必須通過引用傳遞。

通過引用傳遞參數(shù)的方法是在函數(shù)定義中的參數(shù)名稱前加上與號(&),如下例所示:

<?php
/* 定義一個與數(shù)字相乘的函數(shù)
并返回新值 */
function selfMultiply(&$number){
    $number *= $number;
    return $number;
}
 
$mynum = 5;
echo $mynum; // 輸出: 5
 
selfMultiply($mynum);
echo $mynum; // 輸出: 25
?>
測試看看?/?

了解變量作用域

您可以在PHP腳本中的任何位置聲明變量。 但是,聲明的位置決定了變量在PHP程序中的可見性范圍,即變量可以在哪里使用或訪問。 這種可訪問性稱為變量作用域。

默認(rèn)情況下,在函數(shù)內(nèi)聲明的變量是局部變量,不能從該函數(shù)外部訪問或操作它們,如以下示例所示:

<?php
//定義函數(shù)
function test(){
    $greet = "Hello World!";
    echo $greet;
}
 
test(); // 輸出: Hello World!
 
echo $greet; //產(chǎn)生未定義的變量錯誤
?>
測試看看?/?

同樣,如果嘗試訪問或?qū)牒瘮?shù)內(nèi)部的外部變量,則會得到未定義的變量錯誤,如以下示例所示:

<?php
$greet = "Hello World!";
 
//定義函數(shù)
function test(){
    echo $greet;
}
 
test();  //生成未定義變量錯誤
 
echo $greet; // 輸出: Hello World!
?>
測試看看?/?

從上面的示例中可以看到,無法從外部訪問在函數(shù)內(nèi)部聲明的變量,同樣,不能在函數(shù)內(nèi)部訪問在函數(shù)外部聲明的變量。這種分離減少了函數(shù)內(nèi)變量受主程序中變量影響的機(jī)會。

提示:可以在不同的函數(shù)中為變量使用相同的名稱,因?yàn)榫植孔兞恐荒苡陕暶魉鼈兊暮瘮?shù)識別。

global 關(guān)鍵字

在某些情況下,您需要將主程序中的變量導(dǎo)入函數(shù)中,反之亦然。 在這種情況下,可以在函數(shù)內(nèi)部的變量之前使用global關(guān)鍵字。 此關(guān)鍵字將變量轉(zhuǎn)換為全局變量,使其在函數(shù)內(nèi)部和外部均可見或可訪問,如以下示例所示:

<?php
$greet = "Hello World!";
 
//定義函數(shù)
function test(){
    global $greet;
    echo $greet;
}
 
test(); // 輸出: Hello World!
echo $greet; // 輸出: Hello World!
 
//將新值賦給變量
$greet = "Goodbye";
 
test(); // 輸出: Goodbye
echo $greet; // 輸出: Goodbye
?>
測試看看?/?

您將在PHP類和對象一章中了解有關(guān)可見性和訪問控制的更多信息。

創(chuàng)建遞歸函數(shù)

遞歸函數(shù)是一次又一次調(diào)用自身直到滿足條件的函數(shù)。遞歸函數(shù)通常用于求解復(fù)雜的數(shù)學(xué)計(jì)算或處理深度嵌套的結(jié)構(gòu),例如,打印深度嵌套數(shù)組的所有元素。

以下示例演示了遞歸函數(shù)的工作方式。

<?php
//定義遞歸函數(shù)
function printValues($arr) {
    global $count;
    global $items;
    
    //檢查$arr是否為數(shù)組
    if(!is_array($arr)){
        die("ERROR: Input is not an array");
    }
    
    /*
        遍歷數(shù)組,如果value本身是數(shù)組,則遞歸調(diào)用
        函數(shù)將找到的值添加到輸出項(xiàng)目數(shù)組中,
        并為找到的每個值將計(jì)數(shù)器加1
    */
    foreach($arr as $a){
        if(is_array($a)){
            printValues($a);
        } else{
            $items[] = $a;
            $count++;
        }
    }
    
    //返回?cái)?shù)組中的總計(jì)數(shù)和值
    return array('total' => $count, 'values' => $items);
}
 
//定義嵌套數(shù)組
$species = array(
    "birds" => array(
        "Eagle",
        "Parrot",
        "Swan"
    ),
    "mammals" => array(
        "Human",
        "cat" => array(
            "Lion",
            "Tiger",
            "Jaguar"
        ),
        "Elephant",
        "Monkey"
    ),
    "reptiles" => array(
        "snake" => array(
            "Cobra" => array(
                "King Cobra",
                "Egyptian cobra"
            ),
            "Viper",
            "Anaconda"
        ),
        "Crocodile",
        "Dinosaur" => array(
            "T-rex",
            "Alamosaurus"
        )
    )
);
 
//計(jì)算和打印嵌套數(shù)組中的值
$result = printValues($species);
echo $result['total'] . ' value(s) found: ';
echo implode(', ', $result['values']);
?>
測試看看?/?

注意:創(chuàng)建遞歸函數(shù)時要小心,因?yàn)槿绻a編寫不正確,可能會導(dǎo)致函數(shù)調(diào)用的無限循環(huán)。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清