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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP