PHP 使用者自定義函式


介紹

PHP 有大量的內建函式,例如數學函式、字串函式、日期函式、陣列函式等。也可以根據具體需求定義函式。這種函式稱為使用者自定義函式。

函式是一段可重用的語句塊,用於執行特定任務。此程式碼塊用 function 關鍵字定義,並賦予一個以字母或下劃線開頭的名稱。此函式可以從程式中的任何位置呼叫任意多次。

語法

//define a function
function myfunction($arg1, $arg2, ... $argn)
{
   statement1;
   statement2;
   ..
   ..
   return $val;
}
//call function
$ret=myfunction($arg1, $arg2, ... $argn);

函式可以定義為可選的,但可以有任意數量的引數。但是,呼叫時必須提供相同數量的引數。函式體可以包含任何有效的 PHP 程式碼,例如條件語句、迴圈等(甚至可以在函式內部定義其他函式或類)。執行程式碼塊中的語句後,程式控制權將返回到呼叫該函式的位置,而不管函式程式碼塊的最後一條語句是否存在。return 語句前面的表示式會將其值返回給呼叫環境。

使用者自定義函式示例

下面的例子展示了使用者自定義函式 sayhello() 的定義和呼叫。

示例

 線上演示

<?php
//function definition
function sayHello(){
   echo "Hello World!";
}
//function call
sayHello();
?>

這段指令碼從命令列執行時將產生以下結果:

輸出

Hello World!

帶引數的函式

在下面的例子中,一個函式用兩個形式引數定義。

示例

 線上演示

<?php
function add($arg1, $arg2){
   echo $arg1+$arg2 . "
"; } add(10,20); add("Hello", "World"); ?>

輸出

這將產生以下結果:

30
PHP Warning: A non-numeric value encountered in line 3

在第二次呼叫中,兩個字串值作為函式引數給出。由於 PHP 不支援字串的 + 運算子,因此會發出警告。

函式返回值

在下面的例子中,使用者自定義函式處理提供的引數並將值返回給呼叫環境。

示例

 線上演示

<?php
function add($arg1, $arg2){
   return $arg1+$arg2;
}
$val=add(10,20);
echo "addition:". $val. "
"; $val=add("10","20"); echo "addition: $val"; ?>

輸出

這將產生以下結果:

addition:30
addition:30

在第二次呼叫中,即使引數是字串,PHP 也會將其強制轉換為整數並執行加法。

帶有預設引數值的函式

定義函式時,可以為引數賦值預設值。如果呼叫函式時未為該引數賦值,則函式內部將使用此預設值進行處理。在下面的例子中,一個函式用具有預設值的形參定義。

示例

 線上演示

<?php
function welcome($user="Guest"){
   echo "Hello $user
"; } //overrides default welcome("admin"); //uses default welcome(); ?>

輸出

這將產生以下結果:

Hello admin
Hello Guest

在第二次呼叫中,函式在沒有傳遞值的情況下被呼叫。在這種情況下,使用者引數將採用其預設值。

具有可變數量引數的函式

可以定義一個函式,使其能夠接收可變數量的引數。函式定義中形式引數的名稱以 **…** 符號為字首。下面的例子中,add() 函式將作為引數給出的數字列表相加。

示例

 線上演示

<?php
function add(...$numbers){
   $ttl=0;
   foreach ($numbers as $num){
      $ttl=$ttl+$num;
   }
   return $ttl;
}
$total=add(10,15,20);
echo "total= $total
"; echo "total=". add(1,2,3,4,5). "
"; ?>

輸出

這將產生以下結果:

total= 45
total=15

也可以藉助 **func_get_args()** 函式獲取傳遞給函式的引數列表。我們可以執行一個 PHP 迴圈來遍歷傳遞的引數列表中的每個值。在這種情況下,函式定義沒有形式引數。

示例

 線上演示

<?php
function add(){
   $numbers=func_get_args();
   $ttl=0;
   foreach ($numbers as $num){
      $ttl=$ttl+$num;
   }
   return $ttl;
}
$total=add(10,15,20);
echo "total= $total
"; echo "total=". add(1,2,3,4,5). "
"; ?>

輸出

這將產生以下結果:

total= 45
total=15

函式巢狀

可以在另一個函式的主體塊內定義一個函式。但是,在呼叫外部函式之前,不能呼叫內部函式。

示例

 線上演示

<?php
function hello(){
   echo "Hello
";    function welcome(){       echo "Welcome to TutorialsPoint
";    } } //welcome(); hello(); welcome(); ?>

刪除註釋以在 hello() 之前呼叫 wlcome()。以下錯誤訊息將使程式停止:

Fatal error: Uncaught Error: Call to undefined function welcome()

輸出

註釋該行並再次執行

Hello
Welcome to TutorialsPoint

遞迴函式

呼叫自身的函式稱為遞迴函式。無條件地呼叫自身會建立無限迴圈,並由於堆疊溢位而導致記憶體不足錯誤。下面的程式遞迴呼叫 factorial() 函式。

示例

 線上演示

<?php
function factorial($n){
   if ($n < 2) {
      return 1;
   } else {
      return ($n * factorial($n-1));
   }
}
echo "factorial(5) = ". factorial(5);
?>

輸出

factorial(5) = 120

更新於:2020年9月18日

19K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.