php a链接怎么传id_PHP函数参数的传递
PHP 支持兩種參數傳遞方式,分別是按值傳遞(默認)和按引用傳遞。另外,PHP 還支持默認參數和可變長度參數列表。
參數傳遞方式
在調用函數時需要向函數傳遞參數,被傳入的參數稱作實參,而函數定義的參數為形參。PHP 中函數參數傳遞有 2 種方式:按值傳遞和通過引用傳遞。
按值傳遞
按值傳遞的參數相當于在函數內部有這個參數的備份,即使在函數內部改變參數的值,也并不會改變函數外部的值,示例如下:
function test($a){
$a = $a + 1;
return $a;
}
$a = 1;
echo test($a);
test(2);
echo $a;
?>
執行以上代碼的結果為:
2 3 1
通過引用傳遞參數
如果希望允許函數修改它的參數值,就必須通過引用傳遞參數。這樣我們在函數內部是對這個參數本身進行操作。示例如下:
function test(&$a){
$a = $a + 1;
return $a;
}
$x = 1;
echo test($x);
echo $x;
?>
當調用一次 test() 函數后,$x 的值被改變,執行以上代碼的運行結果為:
2 2
注意,以下這種情況 PHP 會報錯:
function test(&$a){
$a = $a + 1;
return $a;
}
test(2); //引用傳遞的參數必須是一個變量
?>
執行以上代碼會報錯“Fatal error:Only variables can be passed by reference”。
默認參數
PHP 支持函數默認參數,允許使用數字、字符串、數組、NULL 等作為默認參數。默認參數的值必須是常量表達式,不能是諸如變量、類成員或者函數調用等。
默認參數示例如下:
function test($arr=array('lily','andy','ricky'), $str='apple'){
echo "I am $arr[1],I love $str
";
}
$names = ['sily','celon','tom'];
$fruit = 'orange';
test();
test($names,$fruit);
?>
執行以上代碼的結果為:
I am andy,I love apple
I am celon,I love orange
為了避免出現意外情況,一般將默認參數放在非默認參數的右側。下面是一個反面教材:
function?makeyogurt($type="acidophilus", $flavour){
return "Making a bowl of $type? flavour.\n";
}
echo makeyogurt("raspberry");
?>
報錯信息:
Warning: Missing argument 2 for makeyogurt(), called in /Library/WebServer/Documents/book/str.php on line 284 and defined in /Library/WebServer/Documents/book/str.php on line 279
Making a bowl of raspberry .
若將$type="acidophilus"放在參數的最右側,則不會報錯。
參數類型聲明
在 PHP 5 中已引入函數的參數類型聲明,如果給定的值不是一個合法的參數類型,那么在 PHP 5 中會出現一個 Fatal error,在 PHP 7 中則會拋出一個 TypeError exception。在 PHP 7 中增加了參數可聲明的類型種類。PHP 中函數可聲明的參數類型如表所示。
參數聲明類型
類型
說明
PHP 版本
class/interface name(類,接口)
參數必須是指定類或接口的實例
PHP 5.0.0
Array
參數為數組類型
PHP 5.1.0
Callable
參數為有效的回調類型
PHP 5.4.0
Bool
參數為布爾型
PHP 7.0.0
Float
參數為浮點型
PHP 7.0.0
Int
參數為整型
PHP 7.0.0
String
參數為字符串
PHP 7.0.0
class/interface name(類,接口)
參數必須是指定類或接口的實例
PHP 5.0.0
Array
參數為數組類型
PHP 5.1.0
指定參數類型為 class 類型的實例如下:
class C{}
class D extends C{} //類D繼承自類C
class E{}
functionf(C$c){
echo?get_class($c)."\n";
}
f(new C);
f(new D);
f(new E);
?>
執行以上程序的結果是:
C D
Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of C, instance of E given, called in /Library/WebServer/Documents/book/str.php on line 293 and defined in /Library/WebServer/Documents/book/str.php:287 Stack trace: #0 /Library/WebServer/Documents/book/str.php(293): f(Object(E)) #1 {main} thrown in /Library/WebServer/Documents/book/str.php on line 287
默認情況下,當傳遞的參數不是函數指定的參數類型時,PHP 會嘗試將所傳參數轉換成指定參數類型。例如,一個函數希望得到一個字符串類型的參數,但假如給其提供的是一個整型參數,PHP 就會自動將其轉換成字符串類型,或者一個函數希望得到一個整型參數,但卻給它傳遞了一個浮點型的參數。示例如下:
function test(int $a,string $b,string $c){
echo ($a + $b);
echo " the string is $c";
}
test(3.8,2,'hello');
?>
執行以上代碼的打印結果為:
5 the string is hello
注意,在將浮點型轉成整型時,只取其中的整數部分。
在 PHP 7 中,可以使用 declare(strict_types=1) 設置嚴格模式,這樣只有在傳遞的參數與函數期望得到的參數類型一致時才能正確執行,否則會拋出錯誤。只有一種情況例外,就是當函數期望得到的是一個浮點型數據而提供的是整型時,函數也能正常被調用。請看如下示例:
declare(strict_types=1);
function test(int $a,int $b,string $c){
echo ($a + $b);
echo " the string is $c";
}
test(3.8,2,'hello');
?>
此處 declare 聲明了 PHP 為嚴格模式,而傳入的參數與函數期望得到的參數類型不一致,所以會報錯,如下所示:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be of the type integer, float given, called in /Library/WebServer/Documents/book/str.php on line 285 and defined in /Library/WebServer/Documents/book/str.php:281 Stack trace: #0 /Library/WebServer/Documents/book/str.php(285): test(3.8, 2, 'hello') #1 {main} thrown in /Library/WebServer/Documents/book/str.php on line 281
可變參數
在 PHP 5.6 及以后的版本中,參數可包含…來表示函數可接受一個可變數量的參數,可變參數將會被當作一個數組傳遞給函數。示例如下:
function test(...$num){
$acc = 0;
foreach ($num as $key => $value) {
$acc += $value;
}
return $acc;
}
echo test(1,2,3,4);
?>
給 test() 函數傳遞的參數 1234 在函數內部將會被當作數組處理,運行以上代碼的結果為:
10
總結
以上是生活随笔為你收集整理的php a链接怎么传id_PHP函数参数的传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fedora操作系统优缺点_不同类型的操
- 下一篇: array_keys_PHP array