PHP 函式引數


介紹

PHP 函式可以定義為接受來自呼叫環境/指令碼的輸入,這些輸入以引數的形式給出。這些引數以逗號分隔的列表形式出現在函式名稱前面的括號內。請注意,在呼叫函式時,必須傳遞相同數量的引數。

PHP 支援按值傳遞、按引用傳遞、傳遞具有預設值的引數以及傳遞可變數量的引數來呼叫函式。

帶引數的函式

在下面的示例中,定義了一個帶有兩個形式引數的函式。當透過按值傳遞引數呼叫此函式時,函式的引數成為其區域性變數。因此,在函式內部對引數值進行的任何更改都不會反映在其外部。

在這裡,$x 的值在函式內部發生了更改,但是如果我們在呼叫函式後檢查其值,它並沒有改變。

示例

 線上演示

<?php
function add($x, $y){
   $x= $x+$y ;
   echo $x . "
"; } $x=10; $y=20; add($x,$y); //outside function $x has previous value. echo $x; ?>

輸出

這將產生以下結果:−

30
10

將陣列傳遞給函式

在下面的示例中,add() 函式被定義為接收陣列作為引數。在函式內部,使用 foreach 迴圈遍歷陣列元素。

示例

 線上演示

<?php
function add($arr){
   $sum=0;
   foreach ($arr as $i){
      $sum+=$i;
   }
   echo "sum = " .$sum;
}
add(array(1,2,3));
?>

輸出

這將產生以下結果:−

sum = 6

按引用傳遞引數

值按值傳遞給函式的引數。因此,在函式內部對引數值進行的更改不會反映在其外部。當引數按引用傳遞時,更改會傳遞到其外部的引數值。

為了按引用接收值,引數名稱必須以 $ 符號為字首。

示例

 線上演示

<?php
function swap(&$x, &$y){
   $t=$x;
   $x=$y;
   $y=$t;
   echo "inside function x=$x y=$y
"; } $x=5; $y=7; echo "before calling function x=$x y=$y
"; swap($x, $y); echo "after calling function x=$x y=$y
"; ?>

輸出

這將產生以下結果:−

before calling function x=5 y=7
inside function x=7 y=5
after calling function x=7 y=5

變數 $x 和 $y 的值在 swap() 函式中被交換。由於變數是按引用傳遞的,因此變數在函式外部也顯示修改後的值。

型別提示(型別宣告)

PHP 事實上是一種動態型別語言。因此,不需要用其型別宣告變數(如在 C/C++ 或 Java 中)。但是,函式中引數的型別宣告允許解析器檢測傳遞給函式的錯誤資料型別。

語法

//define a function with type hints
function myfunction(type $arg1, type $arg2){
   ..
   ..
}

所有標準 PHP 資料型別,包括標量型別、陣列、類/介面、可迭代物件和物件,都是為函式宣告提供型別提示的有效型別。

示例

 線上演示

<?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 (int $x, int $y){
   $z=$x+$y;
   echo "addition=$z
"; } add(10,20); add(5.55, 6.66); ?>

輸出

這將產生以下結果:−

addition=30
addition=11

請注意,在對 add() 函式的第二次呼叫中,浮點數作為引數給出,但仍然沒有顯示錯誤/警告。這是因為 PHP 在內部將浮點數強制轉換為整數以執行加法。為了防止這種自動型別轉換,請使用 **declare** 結構和 **strict_types=1**。

示例

 線上演示

<?php
declare(strict_types=1);
function add (int $x, int $y){
   $z=$x+$y;
   echo "addition=$z
"; } add(10,20); add(5.55, 6.66); ?>

對 add() 函式的第二次呼叫現在將丟擲異常:−

輸出

addition=30
PHP Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type integer, float given

更新於:2020年9月18日

5K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

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