php a链接怎么传id_PHP函数参数的传递
PHP 支持兩種參數(shù)傳遞方式,分別是按值傳遞(默認(rèn))和按引用傳遞。另外,PHP 還支持默認(rèn)參數(shù)和可變長度參數(shù)列表。
參數(shù)傳遞方式
在調(diào)用函數(shù)時需要向函數(shù)傳遞參數(shù),被傳入的參數(shù)稱作實參,而函數(shù)定義的參數(shù)為形參。PHP 中函數(shù)參數(shù)傳遞有 2 種方式:按值傳遞和通過引用傳遞。
按值傳遞
按值傳遞的參數(shù)相當(dāng)于在函數(shù)內(nèi)部有這個參數(shù)的備份,即使在函數(shù)內(nèi)部改變參數(shù)的值,也并不會改變函數(shù)外部的值,示例如下:
function test($a){
$a = $a + 1;
return $a;
}
$a = 1;
echo test($a);
test(2);
echo $a;
?>
執(zhí)行以上代碼的結(jié)果為:
2 3 1
通過引用傳遞參數(shù)
如果希望允許函數(shù)修改它的參數(shù)值,就必須通過引用傳遞參數(shù)。這樣我們在函數(shù)內(nèi)部是對這個參數(shù)本身進(jìn)行操作。示例如下:
function test(&$a){
$a = $a + 1;
return $a;
}
$x = 1;
echo test($x);
echo $x;
?>
當(dāng)調(diào)用一次 test() 函數(shù)后,$x 的值被改變,執(zhí)行以上代碼的運行結(jié)果為:
2 2
注意,以下這種情況 PHP 會報錯:
function test(&$a){
$a = $a + 1;
return $a;
}
test(2); //引用傳遞的參數(shù)必須是一個變量
?>
執(zhí)行以上代碼會報錯“Fatal error:Only variables can be passed by reference”。
默認(rèn)參數(shù)
PHP 支持函數(shù)默認(rèn)參數(shù),允許使用數(shù)字、字符串、數(shù)組、NULL 等作為默認(rèn)參數(shù)。默認(rèn)參數(shù)的值必須是常量表達(dá)式,不能是諸如變量、類成員或者函數(shù)調(diào)用等。
默認(rèn)參數(shù)示例如下:
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);
?>
執(zhí)行以上代碼的結(jié)果為:
I am andy,I love apple
I am celon,I love orange
為了避免出現(xiàn)意外情況,一般將默認(rèn)參數(shù)放在非默認(rèn)參數(shù)的右側(cè)。下面是一個反面教材:
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"放在參數(shù)的最右側(cè),則不會報錯。
參數(shù)類型聲明
在 PHP 5 中已引入函數(shù)的參數(shù)類型聲明,如果給定的值不是一個合法的參數(shù)類型,那么在 PHP 5 中會出現(xiàn)一個 Fatal error,在 PHP 7 中則會拋出一個 TypeError exception。在 PHP 7 中增加了參數(shù)可聲明的類型種類。PHP 中函數(shù)可聲明的參數(shù)類型如表所示。
參數(shù)聲明類型
類型
說明
PHP 版本
class/interface name(類,接口)
參數(shù)必須是指定類或接口的實例
PHP 5.0.0
Array
參數(shù)為數(shù)組類型
PHP 5.1.0
Callable
參數(shù)為有效的回調(diào)類型
PHP 5.4.0
Bool
參數(shù)為布爾型
PHP 7.0.0
Float
參數(shù)為浮點型
PHP 7.0.0
Int
參數(shù)為整型
PHP 7.0.0
String
參數(shù)為字符串
PHP 7.0.0
class/interface name(類,接口)
參數(shù)必須是指定類或接口的實例
PHP 5.0.0
Array
參數(shù)為數(shù)組類型
PHP 5.1.0
指定參數(shù)類型為 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);
?>
執(zhí)行以上程序的結(jié)果是:
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
默認(rèn)情況下,當(dāng)傳遞的參數(shù)不是函數(shù)指定的參數(shù)類型時,PHP 會嘗試將所傳參數(shù)轉(zhuǎn)換成指定參數(shù)類型。例如,一個函數(shù)希望得到一個字符串類型的參數(shù),但假如給其提供的是一個整型參數(shù),PHP 就會自動將其轉(zhuǎn)換成字符串類型,或者一個函數(shù)希望得到一個整型參數(shù),但卻給它傳遞了一個浮點型的參數(shù)。示例如下:
function test(int $a,string $b,string $c){
echo ($a + $b);
echo " the string is $c";
}
test(3.8,2,'hello');
?>
執(zhí)行以上代碼的打印結(jié)果為:
5 the string is hello
注意,在將浮點型轉(zhuǎn)成整型時,只取其中的整數(shù)部分。
在 PHP 7 中,可以使用 declare(strict_types=1) 設(shè)置嚴(yán)格模式,這樣只有在傳遞的參數(shù)與函數(shù)期望得到的參數(shù)類型一致時才能正確執(zhí)行,否則會拋出錯誤。只有一種情況例外,就是當(dāng)函數(shù)期望得到的是一個浮點型數(shù)據(jù)而提供的是整型時,函數(shù)也能正常被調(diào)用。請看如下示例:
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 為嚴(yán)格模式,而傳入的參數(shù)與函數(shù)期望得到的參數(shù)類型不一致,所以會報錯,如下所示:
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
可變參數(shù)
在 PHP 5.6 及以后的版本中,參數(shù)可包含…來表示函數(shù)可接受一個可變數(shù)量的參數(shù),可變參數(shù)將會被當(dāng)作一個數(shù)組傳遞給函數(shù)。示例如下:
function test(...$num){
$acc = 0;
foreach ($num as $key => $value) {
$acc += $value;
}
return $acc;
}
echo test(1,2,3,4);
?>
給 test() 函數(shù)傳遞的參數(shù) 1234 在函數(shù)內(nèi)部將會被當(dāng)作數(shù)組處理,運行以上代碼的結(jié)果為:
10
總結(jié)
以上是生活随笔為你收集整理的php a链接怎么传id_PHP函数参数的传递的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fedora操作系统优缺点_不同类型的操
- 下一篇: Python | 创建员工类别