<?php function test($a){ $a = $a + 1; return $a; } $a = 1; echo test($a); test(2); echo $a; ?>執行以上程式碼的結果為:
2 3 1
<?php function test(&$a){ $a = $a + 1; return $a; } $x = 1; echo test($x); echo $x; ?>當呼叫一次 test() 函數後,$x 的值被改變,執行以上程式碼的執行結果為:
2 2
注意,以下這種情況 PHP 會報錯:<?php function test(&$a){ $a = $a + 1; return $a; } test(2); //參照傳遞的引數必須是一個變數 ?>執行以上程式碼會報錯“Fatal error:Only variables can be passed by reference”。
<?php function test($arr=array('lily','andy','ricky'), $str='apple'){ echo "I am $arr[1],I love $str <br/>"; } $names = ['sily','celon','tom']; $fruit = 'orange'; test(); test($names,$fruit); ?>執行以上程式碼的結果為:
I am andy,I love apple
I am celon,I love orange
<?php 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 版本 |
---|---|---|
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 |
<?php 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 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 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 function test(...$num){ $acc = 0; foreach ($num as $key => $value) { $acc += $value; } return $acc; } echo test(1,2,3,4); ?>給 test() 函數傳遞的引數 1234 在函數內部將會被當作陣列處理,執行以上程式碼的結果為:
10